【发布时间】:2013-06-13 15:02:58
【问题描述】:
我想获取模型中定义的所有非继承字段。也就是说,我想要只在“子模型”中定义的字段,而不是基本(“抽象”)模型。 (最终目的:创建一个仅包含“子模型”中定义的字段的 ModelForm - 动态地,无需写出特定字段)。
通常调用vars(Subclass).keys() 只会为您提供子类的属性,而dir(Subclass) 将为您提供子类及其继承类的属性。我正在尝试使用相同的范例来仅获取 SubModel 中定义的字段:
class Submodel(models.AbstractModel):
field1=...
field2=...
class AbstractModel(models.Model):
fields...
class Meta:
abstract=True
但是当我打电话给vars(Submodel).keys() 时,我得到以下信息(打印出来的):
[u'__module__',
'_meta',
'MultipleObjectsReturned',
'get_next_by_submission_datetime',
'get_next_by_some_date_and_time',
'_base_manager',
'objects',
'_default_manager',
'get_previous_by_submission_datetime',
'the_foreignkey_field_in_abstractmodel',
'get_previous_by_some_date_and_time',
'DoesNotExist',
'__doc__',
'__unicode__']
我不确定为什么这会返回子模型中未定义的内容(这似乎与 vars() 的通常行为不一致)。现在我想了更多,一旦我在子模型上定义了方法,它就会返回那些我不希望用于构建 ModelForm 的方法。
我也尝试过Submodel._meta.fields 和Submodel._meta.many_to_many,但它们返回了 AbstractModel 和 Submodel 的所有字段。
所以主要问题是:有没有一种好方法可以只获取子模型中定义的字段?
还有一个小问题:为什么 vars() 会这样做?
编辑:
在表单定义中,我想做的是:
class ExampleinheritForm(ModelForm):
class Meta:
model = Submodel
fields = some_function_to_return_only_Submodel_fields()
【问题讨论】: