use*_*631 12 django django-queryset
我有2种型号,Company并Product与Product有一个ForeignKey到Company
class Product(Meta):
company = models.ForeignKey(
Company,
related_name='products',
on_delete=models.CASCADE
)
Run Code Online (Sandbox Code Playgroud)
我做了以下过滤:
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
Run Code Online (Sandbox Code Playgroud)
我有以下错误:
The QuerySet value for an exact lookup must be limited to one result using slicing.
Run Code Online (Sandbox Code Playgroud)
company_pk而且product_pk只是变量.如果我删除了产品过滤器,则没有错误.
我认为它发生是因为公司结果是一个QuerySet并作为参数被推送 Product.objects.filter
kev*_*erg 16
公司是一个查询集.你可能想做
Product.objects.filter(company=company[0], pk=product_pk)
Run Code Online (Sandbox Code Playgroud)
或者更好的是,您可以使用ORM中的关系简化为1次查找.
Product.objects.get(company__account=account, company__pk=company_pk, pk=product_pk)
Run Code Online (Sandbox Code Playgroud)
Tyr*_*iwo 13
正如公认的答案所述,公司是一个查询集.
product = Product.objects.filter(company=company, pk=product_pk)
Run Code Online (Sandbox Code Playgroud)
而不是这个
product = Product.objects.filter(company__in=company, pk=product_pk)
Run Code Online (Sandbox Code Playgroud)
试试这个
product = Product.objects.filter(company=company, pk=product_pk)
Run Code Online (Sandbox Code Playgroud)
__in可以处理大于一的查询集(表的多个记录).
这可以在文档的django Many-to_one relationships部分找到. https://docs.djangoproject.com/en/2.0/topics/db/examples/many_to_one/
Django文档因为它的长度和深度而对像我这样的初学者来说可能是可怕的,但如果你可以解决它,它可以为大多数问题提供解决方案.