Django 模型在 save() 中返回更新值而不是在 M2M 实例中返回旧值
Django models returning updated values in save() and not old values in M2M instance
这是我的模型
class Userlist(models.Model):
username = models.CharField(max_length=20)
class Mailinglist(models.Model):
users = models.ManyToManyField(Userlist, blank=True)
def __init__(self, *args, **kwargs):
super(Mailinglist, self).__init__(*args, **kwargs)
userlist = Userlist.objects.all().filter(mailinglist__id=self.pk)
setattr(self, '__original_userlist', userlist)
def log(self):
userlist = Userlist.objects.filter(mailinglist__id=self.pk)
original = getattr(self, '__original_userlist')
print(userlist) #HERE1
print(original) #HERE2
def save(self, force_insert=False, force_update=False, *args, **kwargs):
super(Mailinglist, self).save(force_insert, force_update, *args, **kwargs)
self.log()
我试图获取在我的邮件列表中添加或删除用户之前和之后的值,但这些值在 #HERE1[=17= 中是相同的(新值) ] 和 #HERE2。我有什么想法可以得到旧值吗?
好的,我修好了。 Django 只在真正需要时调用查询。 (惰性查询?)
我做的是强制查询。
我列出了既定清单
def __init__(self, *args, **kwargs):
super(Mailinglist, self).__init__(*args, **kwargs)
userlist = Userlist.objects.all().filter(mailinglist__id=self.pk)
setattr(self, '__original_userlist', set(userlist))
然后
def log(self):
userlist = Userlist.objects.filter(mailinglist__id=self.pk)
original = getattr(self, '__original_userlist')
print(set(userlist)) #HERE1
print(original) #HERE2
这样我什至可以和
比较
diff = set_original - set_actual
这是我的模型
class Userlist(models.Model):
username = models.CharField(max_length=20)
class Mailinglist(models.Model):
users = models.ManyToManyField(Userlist, blank=True)
def __init__(self, *args, **kwargs):
super(Mailinglist, self).__init__(*args, **kwargs)
userlist = Userlist.objects.all().filter(mailinglist__id=self.pk)
setattr(self, '__original_userlist', userlist)
def log(self):
userlist = Userlist.objects.filter(mailinglist__id=self.pk)
original = getattr(self, '__original_userlist')
print(userlist) #HERE1
print(original) #HERE2
def save(self, force_insert=False, force_update=False, *args, **kwargs):
super(Mailinglist, self).save(force_insert, force_update, *args, **kwargs)
self.log()
我试图获取在我的邮件列表中添加或删除用户之前和之后的值,但这些值在 #HERE1[=17= 中是相同的(新值) ] 和 #HERE2。我有什么想法可以得到旧值吗?
好的,我修好了。 Django 只在真正需要时调用查询。 (惰性查询?)
我做的是强制查询。
我列出了既定清单
def __init__(self, *args, **kwargs):
super(Mailinglist, self).__init__(*args, **kwargs)
userlist = Userlist.objects.all().filter(mailinglist__id=self.pk)
setattr(self, '__original_userlist', set(userlist))
然后
def log(self):
userlist = Userlist.objects.filter(mailinglist__id=self.pk)
original = getattr(self, '__original_userlist')
print(set(userlist)) #HERE1
print(original) #HERE2
这样我什至可以和
比较diff = set_original - set_actual