Django - 在查询中排除两个条件

use*_*840 10 python mysql django

最好的方法是什么?

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')
Run Code Online (Sandbox Code Playgroud)

我正在尝试排除没有状态和状态"已删除"的对象.我可以一次订购吗?如果不是最好的方式是什么?

我是Django的新手.

谢谢

Lan*_*don 14

您可以考虑将调用exclude链接在一起:

Object.objects.filter(country_send=country).exclude(status='').exclude(status='deleted').order_by('-id')
Run Code Online (Sandbox Code Playgroud)

这具有像运算符一样的效果or,并且比使用Q()对象更具可读性。

上面 Marcos 的“列表”方法可能最适合您的情况,但如果您在不同的字段上“或”,我的方法会很有用:

Book.objects.exclude(author='Joe').exclude(publish_year='2018')
Run Code Online (Sandbox Code Playgroud)

这将返回所有由 Joe 创作Books于 2018 年出版的内容,并排除这些内容。


xec*_*cgr 13

查看Q对象
您的查询将是:

from django.db.models import Q
Object.objects.filter(country_send=country).exclude(Q(status__exact='') | Q(status__exact='deleted')).order_by('-id')
Run Code Online (Sandbox Code Playgroud)


Mar*_*ayo 12

您可以尝试使用"列表".在状态列表中,您可以添加所需的所有单词.

status = ['deleted', '']
Object.objects.filter(country_send=country).exclude(status__in=status).order_by('-id')
Run Code Online (Sandbox Code Playgroud)

更多关于列表:http://www.sthurlow.com/python/lesson06/