[英]Django Orm Query - Reverse list lookup
Its easy to check if item is in a list via Django ORM like 通过Django ORM可以轻松检查项目是否在列表中
User.objects.filter(name__in = ['x', 'y']) User.objects.filter(name__in = ['x','y'])
how about reverse way. 如何反向。 if User has a field say list of suburbs which he vists (A comma separated list) and we have to check if he has not visited a particular suburb . 如果用户有一个要说的郊区列表(用逗号分隔的列表),并且我们必须检查他是否未访问过特定郊区。
class User(models.Model):
suburb = models.TextField(_('suburbs'),validators=[validate_comma_separated_integer_list], blank=True)
Data when retrieved from shell_plus will be of this sort for 从shell_plus检索时的数据将属于此类
{'suburb': '965,967,969,972' }
Want to get all users who have not visited suburb 100 ? 是否要让所有未访问郊区的用户都100?
You can achieve this by using Q objects . 您可以使用Q对象来实现。
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),
)
You can use contains
lookup like 您可以使用contains
查找
User.objects.exclude(suburb__contains='100')
If you are using postgres db, then I will suggest you use ArrayField instead of comma seprated values. 如果您使用的是postgres db,那么我建议您使用ArrayField而不是逗号分隔的值。
Try using exclude with in lookup 尝试在查找中使用排除
User.objects.exclude(suburb__in=['100'])
If your input is {'suburb': '965,967,969,972'}, 如果您输入的是{'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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.