我正在阅读使用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中,或者这本书中的错误?
答案 0 :(得分:10)
不要以为这在django中是允许的,甚至不是1.0。
来自Field name “hiding” is not permitted - django 1.0
在普通的Python类继承中,允许孩子使用 用于覆盖父类的任何属性的类。在Django中,这个 不允许属于Field实例的属性(至少, 现在不行)。如果基类有一个名为author的字段,那么 无法在任何类中创建另一个名为author的模型字段 继承自该基类。
这仍然适用于最新版本的django。