Допустим, у меня есть эти эту базовую модель:Джанго полиморфные модели с unique_together
class Trackable(PolymorphicModel):
uuid = UUIDField(unique=True)
created_by = models.ForeignKey(settings.AUTH_USER_MODEL)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
и модель ребенка расширяет его:
class Like(Trackable):
content = models.ForeignKey(Content, related_name='likes')
class Meta:
unique_together = ['content', 'created_by']
При запуске миграции, он жалуется:
django.db.models.fields.FieldDoesNotExist: Like has no field named u'created_by'
Вы хотите, чтобы 'Trackable' был собственной таблицей, связанной с' Like' внешним ключом? Если нет, используйте ['abstract = True'] (https://docs.djangoproject.com/en/dev/topics/db/models/#abstract-base-classes), и ваш' unique_together' будет работать должным образом. Если это так, вы не сможете принудить это ограничение к 'unique_together'. –
Я не уверен, что добавление, которое будет работать правильно, с помощью https://github.com/chrisglass/django_polymorphic, поскольку я не вижу в нем упоминания об использовании abstract = True в базовых моделях. –
Я взглянул на этот проект и, похоже, он создан для наследования 'abstract = False'. В этом случае вы говорите о двух разных таблицах, что делает невозможным использование 'unique_together' таким образом. Обратите внимание, что 'abstract = True' обеспечит лучшую производительность и даст уникальное ограничение, поэтому подумайте, действительно ли вам нужно использовать несколько таблиц. –