Фильтр 2 моделей с ContentType в Джанго

У меня есть 2 модели профиля. И я создаю объект "Посетитель". Как я могу фильтровать только между 2 профилями?

class Profile1(models.Model):
    user = models.ForeignKey(User, null=True, unique=True)

class Profile2(models.Model):
    user = models.ForeignKey(User, null=True, unique=True)

class Attendee(models.Model):
    event = models.ForeignKey(Event)
    # This filters through everything... How do I filter down just to the 2 profile objects?
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    profile = generic.GenericForeignKey('content_type', 'object_id')

Спасибо за вашу помощь!

1 ответ

Решение

Так как модель ContentType имеет три поля app_label, model а также name, Таким образом, вы можете легко фильтровать эти поля.

attendees = Attendee.objects.filter(content_type__model = 'Profile1')

Я бы пошел на

from django.contrib.contenttypes.models import ContentType
...

Attendee.objects.filter(
   content_type=ContentType.objects.get_for_model(Profile1))

чтобы избежать сравнения строк и ошибок после рефакторинга имен классов.

Другие вопросы по тегам