我的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)
但对我而言,这并不优雅,只是想知道是否有更好的方法。
答案 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):
....