Вставка данных в другую таблицу на post_save в обновленное поле модели Django
Я использую ModelForms для обновления данных. Мне нужно отследить, какой пользователь обновил поля в "MyModel", сохранив имя пользователя, имя поля и DateTime обновления в таблице UpdateFieldLog. Я узнал, что это можно сделать с помощью сигналов, но не знаю, как это сделать.
Может кто-нибудь помочь
Модель
class MyModel(models.Model):
a = models.CharField(max_length=20, null=True)
b = models.CharField(max_length=25, null=True)
c = models.CharField(max_length=10, null=True)
d = models.CharField(max_length=20, null=True)
e = models.BigIntegerField(null=True)
f = models.CharField(max_length=15, null=True)
g = models.DateField(null=True)
class UpdateFieldLog(models.Model):
field_name = models.CharField(max_length=20, null=False)
updated_by = models.ForeignKey(User, on_delete=models.DO_NOTHING)
updated_on = models.DateTimeField(auto_now_add=True)
@receiver(post_save, sender=MyModel)
def post_save_MyModel(sender, instance, **kwargs):
if not instance._state.adding:
for item in iter(kwargs.get('update_fields')):
if item == 'field_name' and instance.field_name == "some_value":
print(item)
print(instance.field_name)
else:
print ('this is an insert')
Вы можете достичь этого с помощью представлений.
Для создания:
if my_model_form.is_valid():
my_model = my_model_form.save(commit=False)
track_update = TrackUpdate.objects.create(created_by=request.user)
my_model.save()
Для обновления:
track_update = TrackUpdate.objects.get(id=1)
if my_model_form.is_valid():
my_model = my_model_form.save(commit=False)
track_update.updated_by = request.user
track_update.save()
my_model.save()