Django Orm Query - 反向列表查找

时间:2017-10-10 04:39:47

标签: python django django-orm

很容易通过Django ORM检查项目是否在列表中

User.objects.filter(name__in = [' x',' y'])

逆向方式怎么样。 如果用户有一个字段说他所访问的郊区列表(逗号分隔列表),我们必须检查他是否没有访问过某个特定的郊区。

class User(models.Model):
    suburb = models.TextField(_('suburbs'),validators=[validate_comma_separated_integer_list], blank=True)

从shell_plus检索时的数据将是

的这种类型
{'suburb': '965,967,969,972' }

想要获得所有未访问过郊区100的用户吗?

3 个答案:

答案 0 :(得分:2)

您可以使用Q objects来实现此目的。

startswith_string = str(suburb) + ","
contains_string = "," + str(suburb) + ","
endswith_string = "," + str(suburb)

users = User.objects.filter(
    Q(suburb__startswith=startswith_string) | Q(suburb__contains=contains_string) | Q(suburb__endswith=endswith_string),
)

答案 1 :(得分:0)

您可以使用contains lookup之类的

User.objects.exclude(suburb__contains='100')

如果您使用的是postgres数据库,那么我建议您使用ArrayField而不是逗号分隔值。

答案 2 :(得分:0)

尝试将排除与seq2seq.sequence_loss查找

一起使用
User.objects.exclude(suburb__in=['100'])

如果您的输入是{'suburb':'965,967,969,972'},

input = {'suburb': '965,967,969,972' }
input_list = input['suburb'].split(',') # Split the string into list
User.objects.exclude(suburb__in=input_list)