我在项目中使用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一样,而忽略软删除的活动?