我想获取模型中定义的所有非继承字段。也就是说,我想要只在“子模型”中定义的字段,而不是基本(“抽象”)模型。(最终目的:创建一个仅包含“子模型”中定义的字段的 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()