モデルで定義されている継承されていないフィールドをすべて取得したいと考えています。つまり、ベース (「抽象」) モデルではなく、「サブモデル」でのみ定義されたフィールドが必要です。(最終的な目的: 「サブモデル」で定義されたフィールドのみを含むModelForm を動的に作成し、特定のフィールドを書き出す必要はありません)。
通常、呼び出しvars(Subclass).keys()
はサブクラスの属性のみを提供し、サブクラスdir(Subclass)
とその継承されたクラスの両方の属性を提供します。同じパラダイムを使用して、サブモデルで定義されたフィールドのみを取得しようとしています:
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()