如何在 Django 软删除中编码或如何在模型中过滤查询?
How to code in django soft delete or how to filter query in model?
如何在模型中过滤查询?
class ABC(models.Model):
soft_delete = models.IntegerField(blank=True, null=True, default=0)
class Meta:
managed = False
db_table = 'ABC'
<SOMETHING FUNCTION>
我可以在这里写一些这样的函数吗
def get():
queryset = ABC.objects.filter(soft_delete=0)
retuen queryset
或任何其他解决方案?
实例将被软删除或可见。所以 soft_delete
应该是一个布尔字段。
class ABC(models.Model):
soft_delete = models.BooleanField(default=False)
# other fields
然后你可以用这个查询得到软删除的对象:
queryset = ABC.objects.filter(soft_delete=True)
其他未被软删除的对象:
queryset = ABC.objects.filter(soft_delete=False)
所有对象:
queryset = ABC.objects.all()
一般来说,自定义管理器是这项任务的理想人选。示例为:
from core.managers import ABCManager
class ABC(models.Model):
soft_delete = models.BooleanField(default=False)
# other fields
objects = ABCManager()
# active = ABCActiveManager()
将您的经理存储在单独的文件中 (managers.py):
from django.db.models import Manager
class ABCManager(Manager):
def get_queryset(self):
query = super().get_queryset()
query = query.filter(soft_delete=False)
return query
但这是一个全局解决方案,objects
将始终 return 个具有 soft_delete=False
的实例。如果(最有可能)当您还需要获取已删除的对象时,您可以使用不同的方式覆盖默认(对象)管理器名称。
此外,您可以使用 class 方法解决问题:
class ABC(models.Model):
soft_delete = models.BooleanField(default=False)
@classmethod
def active_records(cls):
return cls.objects.filter(soft_delete=False)
然后在 class 级别调用它,如下所示:
ABC.active_records()
# <QuerySet [<ABC: ABC object (1)>, <ABC: ABC object (2)>]>
很难提出解决方案,因为它实际上取决于您以后将如何使用它。
如何在模型中过滤查询?
class ABC(models.Model):
soft_delete = models.IntegerField(blank=True, null=True, default=0)
class Meta:
managed = False
db_table = 'ABC'
<SOMETHING FUNCTION>
我可以在这里写一些这样的函数吗
def get():
queryset = ABC.objects.filter(soft_delete=0)
retuen queryset
或任何其他解决方案?
实例将被软删除或可见。所以 soft_delete
应该是一个布尔字段。
class ABC(models.Model):
soft_delete = models.BooleanField(default=False)
# other fields
然后你可以用这个查询得到软删除的对象:
queryset = ABC.objects.filter(soft_delete=True)
其他未被软删除的对象:
queryset = ABC.objects.filter(soft_delete=False)
所有对象:
queryset = ABC.objects.all()
一般来说,自定义管理器是这项任务的理想人选。示例为:
from core.managers import ABCManager
class ABC(models.Model):
soft_delete = models.BooleanField(default=False)
# other fields
objects = ABCManager()
# active = ABCActiveManager()
将您的经理存储在单独的文件中 (managers.py):
from django.db.models import Manager
class ABCManager(Manager):
def get_queryset(self):
query = super().get_queryset()
query = query.filter(soft_delete=False)
return query
但这是一个全局解决方案,objects
将始终 return 个具有 soft_delete=False
的实例。如果(最有可能)当您还需要获取已删除的对象时,您可以使用不同的方式覆盖默认(对象)管理器名称。
此外,您可以使用 class 方法解决问题:
class ABC(models.Model):
soft_delete = models.BooleanField(default=False)
@classmethod
def active_records(cls):
return cls.objects.filter(soft_delete=False)
然后在 class 级别调用它,如下所示:
ABC.active_records()
# <QuerySet [<ABC: ABC object (1)>, <ABC: ABC object (2)>]>
很难提出解决方案,因为它实际上取决于您以后将如何使用它。