Django模型继承,覆盖字段

5
我正在阅读《Python Web开发与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中是否可能进行覆盖?或者这是书中的错误?

1个回答

12
不要以为在Django中允许这样做,甚至1.0版本都不行。
来自字段名称“隐藏”是不允许的 - Django 4.2 在普通的Python类继承中,子类可以覆盖父类的任何属性。但在Django中,对于Field实例的属性,目前是不允许这样做的。如果一个基类有一个名为author的字段,在任何继承该基类的类中,你不能创建另一个名为author的模型字段。
这个规则仍然适用于最新版本的Django。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接