Django模型继承,覆盖字段

bvpmtnay  于 2023-07-01  发布在  Go
关注(0)|答案(1)|浏览(131)

我正在阅读《Python Web Development with Django》一书,我在书中发现了这个例子:

class Book(models.Model):
            title = models.CharField(max_length=100)
            genre = models.CharField(max_length=100)
            num_pages = models.IntegerField()
            authors = models.ManyToManyField(Author)

            def __unicode__(self):
                return self.title

    class SmithBook(Book):
        authors = models.ManyToManyField(Author, limit_choices_to={'name__endswith': 'Smith'})

看起来好像不起作用:
FieldError:类“SmithBook”中的本地字段“authors”与基类“Book”中名称相似的字段冲突
我正在使用Django 1.5.3,这本书是Django 1.0的。
为什么在Django中继承时不能覆盖字段?这在Django 1.0中是可能的,还是书中的错误?

gywdnpxw

gywdnpxw1#

不要认为这在django中是允许的,甚至1.0都不允许。
From Field name“hiding”is not permitted - Django 4.2
在正常的Python类继承中,允许子类覆盖父类的任何属性。在Django中,这是不允许的属性是Field示例(至少,目前不允许)。如果一个基类有一个名为author的字段,则不能在从该基类继承的任何类中创建另一个名为author的模型字段。
这仍然适用于Django的最新版本。

相关问题