django知道哪些字段更新了吗?

时间:2014-12-02 20:22:03

标签: python django django-orm

我试图了解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如何知道哪些字段需要更新,或者它更新模型中的所有字段(在我看来它是奇怪的行为)。

2 个答案:

答案 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)