У меня есть куча моделей Django, которые наследуются от полиморфной модели django-polymorphic. В другой модели у меня есть отношение ForeignKey к ContentType, которое я хотел бы ограничить моделями, которые наследуются от определенного базового класса.Фильтрация ContentType ForeignKey с использованием django-polymorphic
Пример:
from django.db import models
from polymorphic import PolymorphicModel
from django.contrib.contenttypes.models import ContentType
class MagicBaseModel(PolymorphicModel):
def do_magic(self):
# ...
class MagicObjectA(MagicBaseModel):
def do_magic(self):
super(MagicObjectA, self).do_magic(self)
# ...
class MagicObjectB(MagicBaseModel):
def do_magic(self):
super(MagicObjectB, self).do_magic(self)
# ...
class NonMagicObject(models.Model):
# ...
class MagicAction(models.Model):
magic_object_type = models.ForeignKey(ContentType)
# ...
В приведенном выше примере, я хотел бы ограничить MagicAction.magic_object_type так, что только MagicObjectA и MagicObjectB доступны как выбор.
Я попытался с помощью limit_choices_to
так:
magic_object_type = models.ForeignKey(ContentType, limit_choices_to=Q(polymorphic_ctype=ContentType.objects.get_for_model(MagicBaseModel)))
Тем не менее, кажется, что вы не можете выполнить этот запрос в течение модели инициализации как модель ТипСодержимого еще не готова.
Любые идеи лучшего способа я мог бы подойти к этому?