在外键Django上限制模型选择

时间:2019-03-08 11:43:35

标签: python django

我有以下字段

target_contenttype = models.ForeignKey(ContentType,
                                       blank=True,
                                       null=True,
                                       related_name="target_object",
                                       on_delete=models.PROTECT,
                                       limit_choices_to={'model__in':(
                                           ''        
                                       )})

在limit_choices_to上,我找不到有关如何限制位于不同应用程序上的相关模型的文档。有人可以帮忙吗。

1 个答案:

答案 0 :(得分:1)

您可以使用get_for_model()(如果已导入相关模型)或get_by_natural_key(),并以小写形式向其传递应用名称和模型名称:

from relatedapp.models import RelatedModel

limit_choices_to={'model__in':(
    ContentType.objects.get_for_model(RelatedModel),
    ContentType.objects.get_by_natural_key('relatedapp', 'relatedmodel'),
)}

另一种方法是创建一个Q对象以对应用标签+模型进行过滤,均以小写字母表示:

limit_choices_to=(
    Q(app_label='app1', model='model1') | 
    Q(app_label='app2', model='model2')
)