【问题标题】:Django model inheritance, overriding fieldsDjango模型继承,覆盖字段
【发布时间】:2013-09-26 10:22:12
【问题描述】:

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

【问题讨论】:

    标签: django inheritance


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-22
      • 2015-03-16
      • 1970-01-01
      • 2019-03-31
      • 1970-01-01
      相关资源
      最近更新 更多