Фильтры и ошибка внешнего ключа : "Значение QuerySet для точного поиска должно быть ограничено одним результатом с помощью нарезки".

Я пытаюсь отфильтровать продукты на основе пользователя, вошедшего в систему. Однако эти продукты связаны не непосредственно с пользователем, а с компанией пользователя.

Профиль пользователя связан с компанией пользователя.

Для выделения продукта распределитель должен выполнить следующий процесс:

  1. Перейти к модели RFQ - выберите продукт
  2. Выберите 1 или много Supplier Profiles
  3. Пользователь профиля поставщика сможет увидеть, что было было выделено

Обычно я использую 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}}, если вы хотите, чтобы он отображал что-либо.

Вернуться на верх