Как я могу ограничить Django GenericForeignKey списком моделей? - программирование
Подтвердить что ты не робот

Как я могу ограничить Django GenericForeignKey списком моделей?

Есть ли способ сообщить django, что модель, имеющая типы контента GenericForeignKey, может указывать только на модели из предопределенного списка? Например, у меня есть 4 модели: A, B, C, D и модель X, которая содержит GenericForeignKey. Могу ли я сказать X, что для GenericForeignKey разрешены только A и B?

4b9b3361

Ответ 1

Например, ваши приложения - приложение и приложение2, а в приложении есть модели A, B, а в приложении 2 есть модели 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')

используйте limit_choices_to для ForeignKey.

проверьте django docs для деталей и объектов 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)