Фильтры и ошибка внешнего ключа : "Значение QuerySet для точного поиска должно быть ограничено одним результатом с помощью нарезки".
Я пытаюсь отфильтровать продукты на основе пользователя, вошедшего в систему. Однако эти продукты связаны не непосредственно с пользователем, а с компанией пользователя.
Профиль пользователя связан с компанией пользователя.
Для выделения продукта распределитель должен выполнить следующий процесс:
- Перейти к модели
RFQ
- выберите продукт - Выберите 1 или много
Supplier Profiles
- Пользователь профиля поставщика сможет увидеть, что было было выделено
Обычно я использую pk_id компании, чтобы вернуть это, но в данном случае мне нужно найти альтернативу.
Я пытаюсь разобраться во всех этих взаимодействиях и понять, как можно применить filter()
к тому, чего я пытаюсь достичь.
Текущий код, который я придумал, возвращает следующую ошибку: The QuerySet value for an exact lookup must be limited to one result using slicing.
Возможно, это связано с циклом for в шаблоне.
модель
class Supplier_Profile(models.Model):
name = models.CharField('Supplier Profile', max_length=120, blank=True)
class Supplier_User_Profile(models.Model):
user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
supplier_company = models.ForeignKey(Supplier_Profile,blank=True, null=True, on_delete=models.CASCADE)
class RFQ(models.Model):
rfq_name = models.ForeignKey(Product,blank=True, null=True, on_delete=models.CASCADE)
suppliers_consulted = models.ManyToManyField(Supplier_Profile)
просмотров
def list_supplier_response(request):
supplier_profile = Supplier_Profile.objects.all()
enquiries = Enquiry.objects.filter(name__suppliers_consulted=supplier_profile)
return render(request, 'main/list_supplier_response.html',{'supplier_profile':supplier_profile,'enquiries':enquiries})
шаблон
{% for enquiry in enquiries.all %}
<td><a class="btn btn-outline-primary" href="">{{enquiry.name}}</a>
{% endfor %}
Проблема, с которой вы столкнулись (The QuerySet value for an exact lookup must be limited to one result using slicing
), связана с тем, что, вероятно, существует несколько профилей поставщиков. Вам необходимо использовать метод __in
def list_supplier_response(request):
supplier_profile = Supplier_Profile.objects.all()
enquiries = Enquiry.objects.filter(name__suppliers_consulted__in=supplier_profile)
return render(request, 'main/list_supplier_response.html',{'supplier_profile':supplier_profile,'enquiries':enquiries})
В качестве примечания, вам не нужно писать .all
после значения из контекста.
Я также не увидел модель Enquiry в предоставленных, но я предполагаю, что она где-то в вашем коде. :)
Что касается вашего шаблона, вам, вероятно, следует изменить {{enquiry.name}}
на {{enquiry.name.rfq_name}}
, если вы хотите, чтобы он отображал что-либо.