基本クラス (「myBaseModel」) またはサブクラス (「myDerivedModel」) で定義されているかどうか、フィールド インスタンスから判断することは何とか可能ですか。
または他の方法。モデル インスタンスから継承されていないすべてのフィールドを取得することは可能ですか?
とりあえず、フィールド インスタンスに向かいました。フィールド インスタンスに何らかのメタ情報が関連付けられている可能性があります。
セットアップ:
class myBaseModel(models.Model):
baseField = models.CharField(max_length=30)
class Meta:
abstract = True
class myDerivedModel(myBaseModel):
subClassField = models.CharField(max_length=30)
アプローチ:
myModel = get_model('my_app_name', 'myDerivedModel')
defaultFields = myModel._meta.get_all_field_names()
for field in defaultFields:
fieldInstance = myModel._meta.get_field_by_name(field)
print fieldInstance[0]
これにより、subClassField と baseField が出力されます。subClassField のみを出力する方法を探しています。
django/db/models/options.py から
def get_field_by_name(self, name):
"""
Returns the (field_object, model, direct, m2m), where field_object is
the Field instance for the given name, model is the model containing
this field (None for local fields), direct is True if the field exists
on this model, and m2m is True for many-to-many relations. When
'direct' is False, 'field_object' is the corresponding RelatedObject
for this field (since the field doesn't have an instance associated
with it).
Uses a cache internally, so after the first access, this is very fast.
"""