簡體   English   中英

保存后刪除對象-Django

[英]Delete Objects after Saving - Django

保存Django后,我有一個關於刪除對象的問題,我有以下模型:

class Reaction(models.Model):
    REACT_TYPES = (
        (LIKE, 'Like'),
        (LOVE, 'Love'),
    )
    user = models.ForeignKey(User)
    react_type = models.CharField(max_length=100, choices=REACT_TYPES, default='LIKE')

我該怎么寫save() :保存時,它應該使用THE SAME用戶和react_type刪除可用的對象,或者如果對象不存在則創建一個對象。

    def save(self, force_insert=False, force_update=False, *args, **kwargs):
        user = Reaction.objects.filter(user=self.user)
        react_type = Reaction.objects.filter(user=self.react_type)
        # Model delete if exist
        if self.id.exists() & self.react_type.exists() :
            self.Reaction.delete()
        # Model create if not exist
        else :
            self.Reaction.create()

使用@dirkgroten解決方案修復:

class ReactionManager(models.Manager):
    def save(self, force_insert=False, force_update=False, *args, **kwargs):
        similars = Reaction.objects.filter(user=self.user, react_type=self.react_type)

        if similars.exists():
            print ('exist')
            similars.delete()
        else:
            print ('Not exist')
            similars.create()
    super(Reaction, self).save(*args, **kwargs)

請檢查此代碼。 它可以幫助您:

def save(self, force_insert=False, force_update=False, *args, **kwargs):
    similars, created = Reaction.objects.get_or_create(user=self.user, react_type=self.react_type)

    if not created:
        print ('exist')
        similars.delete()
    super(Reaction, self).save(*args, **kwargs)

此代碼可以正常工作。

def save(self, force_insert=False, force_update=False, *args, **kwargs):
        similars = Reaction.objects.filter(user=self.user, content_type=self.content_type, object_id=self.object_id)
        if similars.exists():
            similars.delete()
            similars.update(user=self.user, react_type=self.react_type)
        else :
            similars.update(user=self.user, react_type=self.react_type)
        super(Reaction, self).save(*args, **kwargs)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM