【发布时间】:2019-02-21 03:28:31
【问题描述】:
问题陈述
我已经创建了一个基础模型:
class CreateUpdateDeleteModel(models.Model):
from django.contrib.auth import get_user_model
from django.utils.text import gettext_lazy as _
from .managers import BakeryManager
from drfaddons.datatypes import UnixTimestampField
create_date = UnixTimestampField(_('Create Date'), auto_now_add=True)
created_by = models.ForeignKey(get_user_model(), on_delete=models.PROTECT,
related_name='%(app_label)s_%(class)s_creator')
delete_date = models.DateTimeField(_('Delete Date'), null=True, blank=True)
deleted_by = models.ForeignKey(get_user_model(), on_delete=models.PROTECT, null=True, blank=True,
related_name='%(app_label)s_%(class)s_destroyer')
update_date = models.DateTimeField(_('Date Modified'), auto_now=True)
updated_by = models.ForeignKey(get_user_model(), on_delete=models.PROTECT, null=True, blank=True,
related_name='%(app_label)s_%(class)s_editor')
objects = BakeryManager()
class Meta:
abstract = True
我希望在我的系统中,所有元素都被软删除,即每当一个对象被删除时,它的行为应该如下:
- 行为与正常删除操作一样:如果
models.PROTECT设置为on_delete的值,则引发错误,如果是models.SET_NULL,则设置为 null 等等。 - 设置
delete_date - 永远不要在任何查询的任何地方(包括管理员)显示它。即使
model.objects.all()也不应该包含已删除的对象。
我该怎么做?
我正在考虑覆盖get_queryset(),这可能会解决problem 3。但是1 和2 呢?
【问题讨论】:
标签: django python-3.x django-models django-orm