我试图了解django的save()是如何工作的。还有一些我无法理解的事情。有没有办法知道目前哪个领域正在更新?
我知道的最好的方法是使用pre_save()信号并像这样做:
current_field_val = instance.my_field
old_field_val == sender.objects.get(pk=instance.pk).my_field
if current_field_val != old_field_val:
# do smth
但我不想从DB中选择。以及DjangoORM如何知道哪些字段需要更新,或者它更新模型中的所有字段(在我看来它是奇怪的行为)。
答案 0 :(得分:0)
你可以使用这样的东西:
class myClass(models.Model):
my_field = models.CharField()
__my_field_orig = None
def __init__(self, *args, **kwargs):
super(myClass, self).__init__(*args, **kwargs)
self.__my_field_orig = self.my_field
def save(self, force_insert=False, force_update=False, *args, **kwargs):
if self.my_field != self.__my_field_orig:
# my_field changed - do something here
super(myClass, self).save(force_insert, force_update, *args, **kwargs)
self.__original_name = self.name
答案 1 :(得分:0)
在视图中,您可以使用form.changed_data
找出表单中更改的数据。
E.g。
if 'yourfield' in form.changed_data`:
(do something)