Python 如何添加条件并使用exlude?

Python 如何添加条件并使用exlude?,python,python-3.x,django,django-models,Python,Python 3.x,Django,Django Models,我有一个疑问: MyTable.objects.filter(date=date).exclude(starthour__range=(start, end), endhour__range=(start, end)) 但是我想排除starthour\uuuu range=(开始,结束)和endhour\uuu range=(开始,结束)不包含或不包含的查询。我认为在这种情况下使用了OR 你能帮我吗 多谢各位 这是的结果,它规定了∧ y) is-x∨ 是的。这就意味着x和y的否定,不是x也不是

我有一个疑问:

MyTable.objects.filter(date=date).exclude(starthour__range=(start, end), endhour__range=(start, end))
但是我想排除
starthour\uuuu range=(开始,结束)和endhour\uuu range=(开始,结束)
不包含或不包含的查询。我认为在这种情况下使用了OR

你能帮我吗

多谢各位

这是的结果,它规定了∧ y) is-x∨ 是的。这就意味着x和y的否定,不是x也不是y。事实上,如果我们看看真值表:

x | y | x ∧ y | ¬x | ¬y | ¬(x ∧ y) | ¬x ∨ ¬y ---+---+-------+----+----+----------+--------- 0 | 0 | 0 | 1 | 1 | 1 | 1 0 | 1 | 0 | 1 | 0 | 1 | 1 1 | 0 | 0 | 0 | 1 | 1 | 1 1 | 1 | 1 | 0 | 0 | 0 | 0 重叠逻辑 但是,根据您的查询,您要查找的是重叠,而不是此类范围检查。仅验证
开始时间
结束时间
是不够的。如果你想检查两件事是否重叠。事实上,假设一个事件从08:00开始,到18:00结束,然后过滤09:00和17:00的范围,然后
starthour
endhour
都不在该范围内,但事件仍然重叠

如果为s1,则两个范围[s1,e1]和[s2,e2]不重叠≥ e2或s2≥ e1。否定,两个重叠的条件是:s1
# records that do not overlap

MyTable.objects.filter(date=date).exclude(
    starthour__lt=end, endhour__lt=start
)
#不重叠的记录
MyTable.objects.filter(日期=日期).exclude(
开始时间=结束,结束时间=开始
)
这是的结果,它规定了&(x∧ y) is-x∨ 是的。这就意味着x和y的否定,不是x也不是y。事实上,如果我们看看真值表:

x | y | x ∧ y | ¬x | ¬y | ¬(x ∧ y) | ¬x ∨ ¬y ---+---+-------+----+----+----------+--------- 0 | 0 | 0 | 1 | 1 | 1 | 1 0 | 1 | 0 | 1 | 0 | 1 | 1 1 | 0 | 0 | 0 | 1 | 1 | 1 1 | 1 | 1 | 0 | 0 | 0 | 0 重叠逻辑 但是,根据您的查询,您要查找的是重叠,而不是此类范围检查。仅验证
开始时间
结束时间
是不够的。如果你想检查两件事是否重叠。事实上,假设一个事件从08:00开始,到18:00结束,然后过滤09:00和17:00的范围,然后
starthour
endhour
都不在该范围内,但事件仍然重叠

如果为s1,则两个范围[s1,e1]和[s2,e2]不重叠≥ e2或s2≥ e1。否定,两个重叠的条件是:s1
# records that do not overlap

MyTable.objects.filter(date=date).exclude(
    starthour__lt=end, endhour__lt=start
)
#不重叠的记录
MyTable.objects.filter(日期=日期).exclude(
开始时间=结束,结束时间=开始

)
是否有用?否,您的两个条件被转换为逻辑AND运算@BobNo,这只是的结果。是否有用?否,您的两个条件被转换为逻辑AND运算@BobNo,这只是的结果。