Ограничить выбор модели по внешнему ключу Django - PullRequest
1 голос
/ 08 марта 2019

У меня есть следующее поле

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 Ответ

1 голос
/ 08 марта 2019

Вы можете использовать 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')
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...