Tôi muốn thêm vài trường vào mọi mô hình trong ứng dụng django của mình. Lần này là created_at
, updated_at
và notes
. Mã trùng lặp cho mỗi hơn 20 mô hình có vẻ câm. Vì vậy, tôi quyết định sử dụng lớp cơ sở trừu tượng sẽ thêm các trường này. Vấn đề là các trường được kế thừa từ lớp cơ sở trừu tượng đến đầu tiên trong danh sách trường trong admin. Khai báo thứ tự trường cho mỗi lớp ModelAdmin không phải là một tùy chọn, nó thậm chí còn nhiều mã trùng lặp hơn với khai báo trường thủ công.Sắp xếp lại các trường trong mô hình Django
Trong giải pháp cuối cùng của tôi, tôi sửa đổi constructor mô hình để sắp xếp lại các lĩnh vực trong _meta trước khi tạo thể hiện mới:
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 ...
Nó hoạt động như dự định, nhưng tôi đang tự hỏi, là có một cách tốt hơn để đạt được mục tiêu của tôi ?