Django更新后获取最新值的最佳方法是什么?

时间:2014-02-18 20:42:22

标签: django

我的django项目有2个模型,User和Profile

我有使用字典**profile

更新配置文件的代码
from django.forms.models import model_to_dict

Profile.objects.filter(id=request.user.profile.id).update(**profile)
print(model_to_dict(request.user.profile))

print语句打印旧的值我猜它是因为第一个语句id=request.user.profile.id中的延迟查询

因此,对我来说,刷新个人资料,我能想到的唯一方法是:

request.user.profile = Profile.objects.get(id=request.user.profile.id)

但对我而言,这并不优雅,只是想知道是否有更好的方法。

2 个答案:

答案 0 :(得分:0)

没有。大规模更新不刷新实例化(夸大,假设)模型对象。 django只是一个orm,但不是一个实体管理器,例如,Hibernate是(我不认为hibernate既不支持)。没有跟踪实例和ID,并且该行只被转换为sql。

答案 1 :(得分:0)

找到了这个

https://gist.github.com/kipanshi/3859962

可能值得创建一个mixin:

class UpdateMixin(object):

    def refresh(self):
        return self.__class__.objects.get(pk=self.pk)


    def update(self, **data):
        self.__class__.objects.filter(pk=self.pk).update(**data)
        return self.refresh()


class Profile(UpdateMixin, models.Model):
    ....