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

时间:2019-06-20 09:41:41

标签: python django filter

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

当然,我可以循环浏览商店中的所有商品并比较它们的名称,但是我敢肯定,有一个contains()方法可以用来命名。也许使用filter()?但是如何?答案太多了,我无法解决我的独特问题

models.py
...
class Item(models.Model):
    item_name = models.CharField(max_length=200)
...

class Shop(models.Model):
    shop_name = models.CharField(max_length=200)
    items = models.ManyToManyField('Product')
...

views.py
...
def check(name):
    if name in Shop.items.filter(name)
        # do something

...

我的代码似乎没有发现商店中有任何同名商品(即使我可以证明有)

2 个答案:

答案 0 :(得分:0)

您只需编写一个exists查询,而不是在整个列表中进行搜索。使用存在效率更高。官方文档还指定了以下内容:

  

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

因此您的查询将变为:

Item.objects.filter(item_name__iexact=name).exists()

答案 1 :(得分:0)

尝试一下

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