Python 如何有效地检查数据库中是否存在名称

Python 如何有效地检查数据库中是否存在名称,python,django,filter,Python,Django,Filter,我想有效地检查某个名称是否与某个商店的任何其他商品名称共享 当然,我可以循环浏览商店中的所有商品并比较它们的名称,但我确信有一种contains()方法,只用于名称。也许使用filter()?但是怎么做呢?有太多广泛的答案,我无法找出我的独特问题 models.py ... 类别项(models.Model): item_name=models.CharField(最大长度=200) ... 类别商店(型号.型号): shop_name=models.CharField(最大长度=200) it

我想有效地检查某个名称是否与某个商店的任何其他商品名称共享

当然,我可以循环浏览商店中的所有商品并比较它们的名称,但我确信有一种contains()方法,只用于名称。也许使用filter()?但是怎么做呢?有太多广泛的答案,我无法找出我的独特问题

models.py
...
类别项(models.Model):
item_name=models.CharField(最大长度=200)
...
类别商店(型号.型号):
shop_name=models.CharField(最大长度=200)
items=models.ManyToManyField('产品')
...
views.py
...
def检查(名称):
如果名称位于Shop.items.filter(名称)中
#做点什么
...
我的代码似乎没有发现商店里有任何同名商品(即使我可以证明有)

您只需编写一个查询,而不是在整个列表中搜索。使用exists更有效。正式文件也规定了这一点:

注意:如果您只想确定是否存在至少一个结果,请不要使用此选项。使用exists()更有效

因此,您的查询将类似于:

Item.objects.filter(item_name__iexact=name).exists()
您可以只编写一个查询,而不是在整个列表中搜索。使用exists更有效。正式文件也规定了这一点:

注意:如果您只想确定是否存在至少一个结果,请不要使用此选项。使用exists()更有效

因此,您的查询将类似于:

Item.objects.filter(item_name__iexact=name).exists()
试试这个

def check(name):
    query_set = Shop.objects.fileter(items__item_name__icontains=name)
        # do something
试试这个

def check(name):
    query_set = Shop.objects.fileter(items__item_name__icontains=name)
        # do something

尝试
Shop.objects.filter(items\uu item\u name=name).exists()
尝试
Shop.objects.filter(items\uu item\u name=name).exists()
然后如何处理查询集?如何与之交互以获得所需?Query\u set是与商品名称匹配的商店对象的集合。您可以循环查询集并执行所需操作。下面是一个打印商品名称匹配的店铺名称的示例。对于查询集中的店铺:打印(shops.shop\u name),然后如何处理查询集中的店铺?如何与之交互以获得所需?Query\u set是与商品名称匹配的商店对象的集合。您可以循环查询集并执行所需操作。下面是一个打印商品名称匹配的店铺名称的示例。对于查询集中的店铺:打印(shops.shop\u name)谢谢!这正是我要找的!谢谢这正是我要找的!