To set the default value of my_field2
to the default value of my_field1
without repeating the call to datetime.utcnow()
, you can override the save()
method of your MyModel
class. Here’s how you can do it:
pythonfrom django.db import models
from datetime import datetime
class MyModel(models.Model):
my_field1 = models.DateTimeField(default=datetime.utcnow, editable=False)
my_field2 = models.DateTimeField(editable=False)
def save(self, *args, **kwargs):
if not self.pk: # If the object is being created for the first time
self.my_field2 = self.my_field1
super(MyModel, self).save(*args, **kwargs)
This way, when a new MyModel
instance is created and saved, my_field2
will automatically be set to the same value as my_field1
.
المزيد من المعلومات
الإجراء الذي تم تنفيذه في الحل السابق يعمل على تحديد قيمة افتراضية لحقل my_field2
بناءً على قيمة افتراضية محددة لحقل my_field1
، دون الحاجة إلى تكرار استدعاء الدالة datetime.utcnow()
.
قمنا بتجاهل تعديل قيمة my_field2
إذا كانت السجل موجودًا بالفعل في قاعدة البيانات، حيث نفهم أنه في حالة تعديل سجل موجود فقط يجب تحديث my_field1
وليس my_field2
.
كما قمنا بتمرير الوسائط *args
و **kwargs
إلى الدالة save()
الأصلية للنموذج باستخدام super(MyModel, self).save(*args, **kwargs)
، وذلك لضمان عمل الحفظ الافتراضي للنموذج بشكل صحيح ودون مشاكل.