4

我正在阅读 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 中是否可能,或者是书中的错误?

4

1 回答 1

11

不要认为这在 django 中已被允许,甚至 1.0.0 都不允许。

不允许从字段名称“隐藏”-django 1.0

在正常的 Python 类继承中,允许子类覆盖父类的任何属性。在 Django 中,这对于作为 Field 实例的属性是不允许的(至少目前不允许)。如果基类有一个名为 author 的字段,则不能在从该基类继承的任何类中创建另一个名为 author 的模型字段。

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

于 2013-09-26T10:30:20.513 回答