Я делаю код с абстрактной моделью для управления созданием и обновлением документов:
class Control(models.Model):
ctrl_dt_add = models.DateTimeField(auto_now_add=True, auto_now=False)
ctrl_dt_mod = models.DateTimeField(auto_now_add=False, auto_now=True)
ctrl_dt_del = models.DateTimeField(default=None,blank=True,null=True)
ctrl_user_add = models.OneToOneField(
to=User,
on_delete=models.DO_NOTHING,
default=None,
blank=True,
null=True,
)
ctrl_user_mod = models.OneToOneField(
to=User,
on_delete=models.DO_NOTHING,
default=None,
blank=True,
null=True,
)
ctrl_user_del = models.OneToOneField(
to=User,
on_delete=models.DO_NOTHING,
default=None,
blank=True,
null=True,
)
ctrl_deleted = models.BooleanField(default=False)
class Meta:
abstract = True
И моя модель:
class MyModel(models.Model):
_id = models.ObjectIdField()
..........
control = models.EmbeddedField(
model_container = Control,
model_form_class = ControlForm
)
objects = models.DjongoManager()
class Meta:
db_table = 'mymodel'
def __str__(self):
return self.value
Моя проблема в том, когда я создаю новый документ в этой модели управляющий ключ вставляет во все ключи datetime нулевое значение, например:
{
"_id" : ObjectId("5f04a3ecc108e12ca4bf5a7f"),
............
"control" : {
"ctrl_dt_add" : null,
"ctrl_dt_mod" : null,
"ctrlwdt_del" : null,
"ctrl_user_add_id" : 1,
"ctrl_user_mod_id" : null,
"ctrl_user_del_id" : null,
"ctrl_deleted" : false
}
}
Мне нужно объявить значения во всех действиях с этой моделью. Сохраняю, создав функцию сохранения в модели. Но мне бы хотелось, чтобы это не требовалось для работы с ним.
def save(self, request=None, *args, **kwargs):
if request:
self.control.ctrl_user_mod = request.user
self.control.ctrl_dt_mod = now()
super().save(*args, **kwargs)
Спасибо !!