Django queryset和切片的问题

Django queryset和切片的问题,django,django-queryset,Django,Django Queryset,我有两种型号,公司和产品,其中产品拥有公司 class Product(Meta): company = models.ForeignKey( Company, related_name='products', on_delete=models.CASCADE ) 我执行以下过滤: company = Company.objects.filter(account=account, pk=company_pk)

我有两种型号,
公司
产品
,其中
产品
拥有
公司

class Product(Meta):
    company = models.ForeignKey(
        Company, 
        related_name='products', 
        on_delete=models.CASCADE
    )
我执行以下过滤:

 company = Company.objects.filter(account=account, pk=company_pk)
        if not company:
            raise Http404
        product = Product.objects.filter(company=company, pk=product_pk)
        if not product:
            raise Http404
        return product
我有以下错误:

The QuerySet value for an exact lookup must be limited to one result using slicing.
公司主键
产品主键
只是变量。如果删除产品过滤器,则不会出现错误


我认为这是因为company result是一个QuerySet,并作为参数推送到
Product.objects.filter
company是一个QuerySet。你可能想这样做

Product.objects.filter(company=company[0], pk=product_pk)
或者更好的是,您可以使用ORM中的关系简化为1个查找

Product.objects.get(company__account=account, company__pk=company_pk, pk=product_pk) 

正如公认的答案所说,公司是一个查询集

精确查找的QuerySet值必须限制为使用切片的一个结果

而不是这个

试试这个

\u在
中可以处理大于一个(表的多个记录)的查询集

这可以在文档的django多对一关系部分中找到。


Django文档对于像我这样的初学者来说可能是可怕的,因为它的长度和深度,尽管如果您能够破解它,它可以为大多数问题提供解决方案。

当您传递一个
查询集时,也会产生此错误,该查询集用于您正在搜索的值

Company.objects.filter(account=account,pk=Company\u pk)
实际上返回一个
queryset
,并且该
queryset
不能在此查询中使用

Product.objects.filter(公司=公司,主键=产品)
不生成错误消息

这里真正缺少的是一个
.get
,或者

Company.objects.filter(account=account,pk=Company\u pk).get()

Company.objects.get(account=account,pk=Company\u pk)

谢谢,我没有使用[0],因为我认为这只是一个结果,但我假设是一个包含一个元素的列表
过滤器
返回一个查询集,它可以像序列一样切片<如果您确定pk存在,那么code>get
就可以了;如果pk不存在,它将抛出一个异常,您可以捕获该异常并将其转换为404。或者,如果您在视图中,正如看起来的那样,您可以使用
get\u object\u或_404
快捷方式:@kevswanberg-通过搜索很难找到此问答。你会考虑扩展一个泛型例子的答案吗?(例如:<代码> QS= MODEL1.Objist.Futter(AdviTythIn=Muldia2.Objist.Faster(γ*))< /代码>转换为正确的答案)。正如@tyranotaiwo和您都注意到的,由于在queryset中使用queryset而引发了错误。但是错误表明
slice
是一个问题-在切片周围搜索会产生大量
对查询集进行切片
类型Q&a(这使得这个特定的用例问题很难找到)。如果有多个适合的对象,.get()不返回错误吗?
product = Product.objects.filter(company=company, pk=product_pk)
product = Product.objects.filter(company__in=company, pk=product_pk)