数据库删除数据时不是直接将数据删除,当一条数据对企业没用后,一般人可能会选择删除这条数据。但是删除后,万一以后又突然有用呢。所以我们这时候会选择在写orm模块的时候,加入is_delete字段
is_delete = models.BooleanField(default=False,verbose_name='是否删除')
# is_delete 为 True 也就是 1 时,则表示删除了,删除了就不应该在数据库表中再次使用了
这样以后咱如果要删除一条数据了,就设置一下
is_delete=1
就表示这条数据在逻辑上删除了,简单的说就是你再怎么搜数据库也搜不到了,如果以后还用,就再设置
is_delete=0
就可以了!
但是,自己在写项目的时候,遇到了问题
models.py
class BaseModel(models.Model):
create_time = models.DateTimeField(auto_now_add=True,verbose_name='创建时间')
update_date = models.DateTimeField(auto_now=True,verbose_name='更新时间')
is_delete = models.BooleanField(default=False,verbose_name='是否删除')
is_display = models.BooleanField(default=True,verbose_name='是否展示')
display_order = models.IntegerField()
class Meta:
abstract = True
views.py
from . import models
from . import serializer
from django.conf import settings
class BannerView(GenericViewSet,ListModelMixin):
# 无论有多少条待展示的数据,最多就展示3条
queryset = models.Banner.objects.filter(is_delete=False,is_display=True).order_by('display_order')[:settings.BANNER_COUNTER]
queryset1 = models.Banner.objects.filter(is_delete=True)
serializer_class = serializer.BannerModelSerilaizer
print(queryset) # <QuerySet []> <QuerySet [<Banner: banner01>, <Banner: banner02>, <Banner: banner03>]>
print(queryset1) # <QuerySet [<Banner: banner01>, <Banner: banner02>, <Banner: banner03>]>
去获取数据,得到一个空列表
如果将is_delete 改为True,就可以正常得到
class BannerView(GenericViewSet,ListModelMixin):
# 无论有多少条待展示的数据,最多就展示3条
queryset = models.Banner.objects.filter(is_delete=True,is_display=True).order_by('display_order')[:settings.BANNER_COUNTER]
queryset1 = models.Banner.objects.filter(is_delete=True)
serializer_class = serializer.BannerModelSerilaizer
print(queryset) # <QuerySet [<Banner: banner01>, <Banner: banner02>, <Banner: banner03>]>
print(queryset1) # <QuerySet [<Banner: banner01>, <Banner: banner02>, <Banner: banner03>]>
排了很久的错,没想到问题是这样,虽然错排出来了,但是还是不理解,is_delete=True,不是代表数据删除了吗?为什么还能拿到数据,上课老师讲的也是is_delete = False 才能拿到数据