我想在我的django應用程序的每個模型中添加幾個字段。這次是created_at
,updated_at
和notes
。爲20多個模型中的每一個複製代碼似乎都很愚蠢。所以,我決定使用可以添加這些字段的抽象基類。問題是,從抽象基類繼承的字段在管理中的字段列表中首先出現。爲每個ModelAdmin類聲明字段順序不是一個選項,它比手動字段聲明更重複的代碼。在Django模型中重新排序字段
在我最後的解決辦法,我修改了模型構建創建新實例之前,重新排序_meta領域:
class MyModel(models.Model):
# Service fields
notes = my_fields.NotesField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
last_fields = ("notes", "created_at", "updated_at")
def __init__(self, *args, **kwargs):
new_order = [f.name for f in self._meta.fields]
for field in self.last_fields:
new_order.remove(field)
new_order.append(field)
self._meta._field_name_cache.sort(key=lambda x: new_order.index(x.name))
super(MyModel, self).__init__(*args, **kwargs)
class ModelA(MyModel):
field1 = models.CharField()
field2 = models.CharField()
#etc ...
它按預期工作,但我想知道,有沒有更好的方式來acheive我的目標?