Django模型继承,覆盖字段

时间:2013-09-26 10:22:13

标签: django inheritance

我正在阅读使用Django的Python Web Development一书,我在书中找到了这个例子:

 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 个答案:

答案 0 :(得分:10)

不要以为这在django中是允许的,甚至不是1.0。

来自Field name “hiding” is not permitted - django 1.0

  

在普通的Python类继承中,允许孩子使用   用于覆盖父类的任何属性的类。在Django中,这个   不允许属于Field实例的属性(至少,   现在不行)。如果基类有一个名为author的字段,那么   无法在任何类中创建另一个名为author的模型字段   继承自该基类。

这仍然适用于最新版本的django。