Проблемы с queryset и нарезкой
у меня 2 модели,Company
и Product
С Product
наличие иностранного ключа к Company
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_pk
и product_pk
просто переменные. Если я удалю фильтр продукта, ошибки не будет.
Я предполагаю, что это происходит потому, что результат компании является QuerySet и толкается как аргумент в Product.objects.filter
2 ответов
компания является 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.
The QuerySet value for an exact lookup must be limited to one result using slicing.
вместо этого
product = Product.objects.filter(company=company, pk=product_pk)
попробуйте это
product = Product.objects.filter(company__in=company, pk=product_pk)
_ _ in может обрабатывать запросы больше одного (несколько записей таблицы).
Это можно найти в разделе отношений django Many-to_one документации. https://docs.djangoproject.com/en/2.0/topics/db/examples/many_to_one/
документация Django может быть страшной для Новичок, как я из-за его длины и глубины, хотя он обеспечивает решения большинства проблем, если вы можете взломать его.