में रीडरिंग फ़ील्ड मैं अपने django एप्लिकेशन में प्रत्येक मॉडल में कुछ फ़ील्ड जोड़ना चाहता हूं। इस बार यह created_at
, updated_at
और notes
है। 20+ मॉडल में से प्रत्येक के लिए डुप्लिकेटिंग कोड गूंगा लगता है। इसलिए, मैंने अमूर्त बेस क्लास का उपयोग करने का निर्णय लिया जो इन क्षेत्रों को जोड़ देगा। समस्या यह है कि अमूर्त बेस क्लास से विरासत में प्राप्त क्षेत्र पहले व्यवस्थापक सूची में फ़ील्ड सूची में आते हैं। प्रत्येक मॉडल एडमिन क्लास के लिए फ़ील्ड ऑर्डर घोषित करना एक विकल्प नहीं है, मैन्युअल फील्ड घोषणा के मुकाबले यह और भी डुप्लिकेट कोड है।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 ...
यह अपेक्षित तरीके से काम, लेकिन मैं सोच रहा हूँ, वहाँ मेरा लक्ष्य हासिल करने के लिए एक बेहतर तरीका है ?