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

有没有办法告诉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)

以上是 如何将Django的GenericForeignKey限制为模型列表? 的全部内容, 来源链接: utcz.com/qa/401430.html

回到顶部