2016-06-23 14 views
0

これは、私は、ユーザーが自分の中に追加または削除される前と後の値を取得しようとしているDjangoの保存に更新された値を返すモデル()およびないM2Mインスタンス内の古い値

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#HERE2です。どのように私は古い価値を得ることができる任意の考え?

答えて

0

[OK]を修正しました。 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)) 

は私も

diff = set_original - set_actual 
と比較することができ、この方法では、

def log(self): 
    userlist = Userlist.objects.filter(mailinglist__id=self.pk) 
    original = getattr(self, '__original_userlist') 
    print(set(userlist)) #HERE1 
    print(original) #HERE2 

次に設定として、私はリストを作りました

関連する問題