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

2024-06-16 10:11:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找出django的save()是如何工作的。有些事情我不明白。有没有办法知道目前哪个字段正在更新?在

我知道的最好的方法是使用pre_save()信号,然后像这样执行smth:

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

但我不想从数据库中选择。以及djangorm如何知道哪些字段需要更新,或者它如何更新模型中的所有字段(在我看来,这是一种奇怪的行为)。在


Tags: django方法instancefield信号mysaveval
2条回答

你可以用这样的方法:

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

在视图中,您可以使用form.changed_data找出表单中哪些数据被更改。在

例如

if 'yourfield' in form.changed_data`:
    (do something)

相关问题 更多 >