Проблемы с 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 может быть страшной для Новичок, как я из-за его длины и глубины, хотя он обеспечивает решения большинства проблем, если вы можете взломать его.