数据库删除数据时不是直接将数据删除,当一条数据对企业没用后,一般人可能会选择删除这条数据。但是删除后,万一以后又突然有用呢。所以我们这时候会选择在写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 才能拿到数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY