当前位置: 首页 > 面试题库 >

如何将Django的GenericForeignKey限制为模型列表?

华坚成
2023-03-14
问题内容

有没有办法告诉Django,具有内容类型GenericForeignKey的模型只能指向预定义列表中的模型?例如,我有4个模型:A,B,C,D和一个拥有GenericForeignKey的模型X。我可以告诉X GenericForeignKey只允许A和B吗?


问题答案:

例如,你的应用是app和app2,并且app中有A,B模型,而app2中有C,D模型。你只想查看app.A和app.B和app2.C

from django.db import models

class TaggedItem(models.Model):
    tag = models.SlugField()
    limit = models.Q(app_label = 'app', model = 'a') | models.Q(app_label = 'app', model = 'b') | models.Q(app_label = 'app2', model = 'c')
    content_type = models.ForeignKey(ContentType, limit_choices_to = limit)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

在ForeignKey上使用limit_choices_to。

检查Django文档以获取详细信息和Q对象app_label。你需要编写适当的app_label和模型。这只是代码片段

加:我认为你写错了app_label。这可以为你提供帮助。

from django.contrib.contenttypes.models import ContentType
for c in ContentType.objects.all():
    print(c.app_label, c.model)


 类似资料:
  • 问题内容: 我正在尝试序列化定义为的模型对象列表: 我为json.dumps()写了一个自定义的序列化器(编码器): 当我仅序列化一个对象时,我就能做到。当我尝试序列化对象列表时,我得到 我进行了搜索,但是没有找到工作的地方。.我在考虑为模型对象列表编写自定义序列化程序。 问题答案: 自定义编码器不会递归调用。实际上,最好 不要 使用自定义编码器,而应在序列化之前将对象转换为简单的python类型

  • 问题内容: Django有各种可用于模型的数字字段,例如DecimalField和PositiveIntegerField。尽管前者可以限制为存储的小数位数和总字符数,但是有没有办法将其限制为仅存储一定范围内的数字,例如0.0-5.0? 失败了,有什么方法可以限制PositiveIntegerField只存储例如最大为50的数字吗? 问题答案: 在这种情况下,你可以从内置的IntegerField

  • 问题内容: 我有只希望从中创建一个实例的模型,不应再允许更多实例。 这可能吗?我有感觉到已经在某处完成了此操作,但是很遗憾,我无法找到它。 编辑:我需要一个愚蠢的简单CMS。我有一个FrontPage和Page类继承的抽象类。我只希望能够创建一个首页对象。 FrontPage对象和Page对象之间的区别在于,它们应该具有略有不同的字段和模板,并且如上所述,只能创建一个FrontPage。 问题答案

  • 我有一个模型,它使用一个通用外键,使用“content\u type”字段来存储内容类型,“object\u id”来存储对象id。这个模型需要使用CRUD API进行操作,我使用的是DRF。我有一个模型的序列化程序,但我遇到了一点问题。如果我只是将content\u type添加到如下字段列表中 序列化程序将JSON表示设置为ContentType模型实例的ID。API的用户不知道这些ID,我不

  • 问题内容: 使用inspectdb,我可以从postgres到Django获取一个“间隔”字段。在Django中,它是一个TextField。我检索到的对象确实是一个timedelta对象! 现在,我想将此timedelta对象放入新模型中。最好的方法是什么?因为将timedelta放在TextField中会导致对象的str版本… 问题答案: 您可以以天或秒为单位将时间增量标准化为单个浮点数。 这

  • 如何将的模板参数限制为