class Parent(models.Model):
pass
class RebelliousChild(Parent):
parent_fields = [__x.name for __x in Parent._meta._fields()]
Django的1.3響應:Django的多表繼承上泄露的變量扼流圈模型定義
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
列表理解leak their control variables in Python 2。 Django prohibits overriding parent field attributes,似乎涉及某種方式,因爲Django 1.5具有相同的問題。但是在這兩種情況下,泄漏屬性名稱_RebelliousChild__x
未在父級上定義。
這是怎麼回事?
PS 使用 「列表(x.name在Parent._meta._fields X())」 比 「del x」 只是漂亮。請參閱上述https://stackoverflow.com/a/4199355關於不泄漏其控制變量的發電機。