我正在阅读《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中是可能的,还是书中的错误?
1条答案
按热度按时间gywdnpxw1#
不要认为这在django中是允许的,甚至1.0都不允许。
From Field name“hiding”is not permitted - Django 4.2
在正常的Python类继承中,允许子类覆盖父类的任何属性。在Django中,这是不允许的属性是Field示例(至少,目前不允许)。如果一个基类有一个名为author的字段,则不能在从该基类继承的任何类中创建另一个名为author的模型字段。
这仍然适用于Django的最新版本。