Django软删除和通用关系管理器

时间:2018-12-14 16:50:37

标签: python django

我在项目中使用Django 2.0,并且实现了软删除功能,因此可以恢复已删除的对象。
我在我的Django项目中使用了this implementation的软删除功能,效果很好。但是某些模型具有可以被软删除的对象的GenericRelation。有没有办法实现像BaseModelManager这样的GenericRelationManager,它将忽略软删除的对象?
例如,假设我有以下代码(从this site借来的):

from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType

class Activity(BaseModel):
    FAVORITE = 'F'
    LIKE = 'L'
    UP_VOTE = 'U'
    DOWN_VOTE = 'D'
    ACTIVITY_TYPES = (
        (FAVORITE, 'Favorite'),
        (LIKE, 'Like'),
        (UP_VOTE, 'Up Vote'),
        (DOWN_VOTE, 'Down Vote'),
    )


    user = models.ForeignKey(User)
    activity_type = models.CharField(max_length=1, choices=ACTIVITY_TYPES)
    date = models.DateTimeField(auto_now_add=True)

    # Below the mandatory fields for generic relation
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey()

还有

from django.db import models
from django.contrib.contenttypes.fields import GenericRelation

from activities.models import Activity


class Post(models.Model):
    ...
    likes = GenericRelation(Activity)

class Question(models.Model):
    ...
    activities = GenericRelation(Activity)

class Answer(models.Model):
    ...
    votes = GenericRelation(Activity)

class Comment(models.Model):
    ...
    likes = GenericRelation(Activity)

如果我软删除一个活动,我仍然可以通过这些GenericRelations找到被软删除的活动。我能否实现GenericRelation的实现,使其表现与BaseModelManager一样,而忽略软删除的活动?

0 个答案:

没有答案