【发布时间】:2021-08-15 03:03:22
【问题描述】:
我正在使用 Django 3.2
我遇到了一个奇怪的行为,这似乎是一个错误;在 ABC 中定义的约束中使用的字段不会被子类继承。
myapp/models.py
class BaseFoo(models.Model):
content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE,related_name='%(class)s_content_type')
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
user = models.ForeignKey(User, blank=False, null=False, on_delete=models.CASCADE,related_name='%(class)s')
created = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
constraints = [
models.UniqueConstraint(fields=['content_object', 'user'], name="'%(class)s_unique"),
]
class Foo(BaseFoo):
class Meta(BaseFoo.Meta):
abstract = False
当我makemigrations 时没有问题,但是,当我尝试迁移架构时(`python manage.py migrate),我收到以下错误:
myapp.Foo: (models.E016) 'constraints' 指的是字段 'content_object',它不是模型 'Foo' 的本地字段。 提示:这个问题可能是多表继承引起的。
为什么 Foo 没有继承父 ABC 中明确定义的字段? - 我该如何解决这个问题(假设它不是错误)?
【问题讨论】:
标签: django django-models django-orm django-migrations