最好的方法是什么?
Object.objects.filter(country_send=country).exclude(status__exact='').order_by('-id')
Object.objects.filter(country_send=country).exclude(status__exact='deleted').order_by('-id')
我试图排除没有状态和状态的对象"删除"。我可以一次订购吗?如果不是最好的方式?
我是Django的新人。
谢谢
答案 0 :(得分:13)
了解Q Objects
您的查询将是:
from django.db.models import Q
Object.objects.filter(country_send=country).exclude(Q(status__exact='') | Q(status__exact='deleted')).order_by('-id')
答案 1 :(得分:12)
您可以尝试使用“列表”。在状态列表中,您可以添加所需的所有单词。
status = ['deleted', '']
Object.objects.filter(country_send=country).exclude(status__in=status).order_by('-id')
有关列表的更多信息:http://www.sthurlow.com/python/lesson06/
答案 2 :(得分:1)
您可以考虑将exclude
个调用链接在一起:
Object.objects.filter(country_send=country).exclude(status='').exclude(status='deleted').order_by('-id')
这具有类似于or
运算符的作用,并且比使用Q()
对象更具可读性。
上面的Marcos的“列表”方法可能是最适合您的情况,但是如果您在不同的领域“或”,我的方法将很有用:
Book.objects.exclude(author='Joe').exclude(publish_year='2018')
这将返回所有Books
,并排除由Joe( OR )于2018年发布的作者所写的内容。
答案 3 :(得分:1)
您可以使用Q
from django.db.models import Q
Model.objects.filter(country_send=country, ~Q(status__in=['deleted', ''])).order_by('-id')