更改某字段时自动更新另一个字段

5 投票
2 回答
2108 浏览
提问于 2025-04-15 20:52

我有一个模型,里面有很多不同的字段,比如 first_name(名字)、last_name(姓氏)等等。还有一些字段,比如 first_name_ud 和 last_name_ud,这些字段是用来记录相关字段最后一次更新的日期的(也就是说,当 first_name 被修改时,first_name_ud 就会被设置为当前日期)。

有没有办法让这个过程自动进行,还是说每次保存一个对象的时候,我都需要检查哪些字段发生了变化,然后再更新相关的 "_ud" 字段呢?

非常感谢!

2 个回答

0

谢谢你的帮助。我最后修改了模型的保存方法,我觉得这样可以解决问题:

def save(self):
    current_date = date.today()
    if self.id:
        try:
            old = UserProfile.objects.get(pk = self.id)
            fields = UserProfile._meta.fields
            for field in fields:
                field_name = field.name
                date_name = field_name + '_ud'
                if not field_name.endswith('_ud') and date_name in fields:
                    if self.__dict__[field_name] != old.__dict__[field_name]:
                        self.__dict__[date_name] = current_date
                        self.date_updated = current_date
        except UserProfile.DoesNotExit:
            pass
    super(UserProfile, self).save()
3

要么你可以编写一些Field的子类,让它们同时更新这两个字段,要么就使用服务器端的触发器。

撰写回答