Django apply migrate для наследуемых моделей
У меня есть базовая модель BaseStage и две наследуемые модели TestSpend , StageSpend
class BaseStage(models.Model):
name = models.CharField
date = models.DateField
.......
class TestSpend(BaseStage):
direction = models.CharField
class StageSpend(BaseStage):
direction = models.CharField
Сейчас я пытаюсь добавить поле ограничений в Meta
class Meta:
verbose_name = ''
verbose_name_plural = ''
constraints = [
models.UniqueConstraint(
fields=['direction', 'name', 'date'], name='unique_name'
)
]
to both models. Successfully running the makemigrations
command, but when run migarte
got
django.db.utils.ProgrammingError: column "name" named in key does not exist
Попробуйте это:
class BaseStage(models.Model):
name = models.CharField(max_length=30)
date = models.DateField()
# Other fields
@property
def direction(self):
raise NotImplemented
class Meta:
abstract = True
constraints = [UniqueConstraint(name='%(class)s_unique_name', fields=['direction', 'name', 'date'])]
class TestSpend(BaseStage):
direction = models.CharField(max_length=30)
class StageSpend(BaseStage):
direction = models.CharField(max_length=30)
Замените различные значения max_length
на нужные вам. Обратите внимание, что сейчас реализация поля direction
в различных подклассах всегда одна и та же, поэтому вы могли бы использовать одну уникальную модель, возможно, с полем выбора, которое описывает тип этапа.