Django 多表继承在模型定义中泄漏的变量上阻塞


class Parent(models.Model):
    pass
class RebelliousChild(Parent):
    parent_fields = [__x.name for __x in Parent._meta._fields()]

Django 1.3 回应:

django.core.exceptions.FieldError: Local field '_RebelliousChild__x' 
in class 'RebelliousChild'clashes with field of similar name from base class 'Parent'

Django 1.5 回应:

FieldError: Local field u'id' in class 'RebelliousChild' clashes with field 
of similar name from base class 'Parent'

我的第二反应(在尝试将变量设为私有之后(是删除变量(这有效(。

parent_fields = [__x.name for __x in Parent._meta._fields()]
del __x

列表推导式在 Python 2 中泄漏了它们的控制变量。Django 禁止覆盖父字段属性,这似乎以某种方式涉及,因为 Django 1.5 也有同样的问题。但在这两种情况下,泄漏的属性名称_RebelliousChild__x都没有在父级上定义。

这是怎么回事?

附言 在 Parent._meta._fields((( 中使用 "list(x.name for x "比 "del x" 更漂亮。请参阅上述关于生成器不泄漏其控制变量的 https://stackoverflow.com/a/4199355。

看看这里: https://docs.djangoproject.com/en/1.5/topics/db/models/#multi-table-inheritance

简而言之,您不需要将父字段应用于子字段(它们已经存在,但位于不同的表中(,您可以直接在 RebelliousChild 实例上访问它们。

相关内容

  • 没有找到相关文章

最新更新