我想说我在MySQL中有一个表xyz,它有三列:col1,col2和col3(所有varchar)。我正在使用带有Django的python为我的服务器使用这个模型。现在我想在Django ORM中编写一个表达式,它应该在MySQL中产生这个查询:
SELECT * FROM xyz WHERE col3 != CONCAT(col1, col2)
我知道Django filter
/ exclude
,而不是基于固定值的过滤器,而不是列:
xyz.objects.exclude(col3='something')
或
xyz.objects.filter(col3='something')
(PS:我知道如果一列包含来自其他列的冗余信息,那么表格设计会很糟糕)
答案 0 :(得分:2)
你必须为此使用一些SQL。 raw
:
xyz.objects.raw("SELECT * FROM xyz WHERE col3 != CONCAT(col1, col2)")
或extra
:
xyz.objects.extra(where=["col3 != CONCAT(col1, col2)"])
答案 1 :(得分:2)
在Django>=1.8
中,这也是可能的:
from django.db.models.functions import Concat
queryset = xyz.objects.exclude(col3=Concat('col1', 'col2'))