Фильтруйте запрос get фреймворка отдыха Django по внешнему ключу (MultipleObjectsReturned)

У меня есть таблица базы данных под названием Supplier, которая имеет внешний ключ User, у каждого пользователя есть свои поставщики. У меня есть запрос get, который возвращает всех поставщиков во всей таблице, но я не могу найти способ отфильтровать его, чтобы я получал только поставщиков, связанных с запрашиваемым пользователем.

Я получаю доступ к этому запросу по этому URL: http://localhost:8000/pm/getsuppliers/primary-key-of-user/

models.py:

class UserProfile(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    bio = models.CharField(max_length=200)
    email = models.CharField(max_length=200)

class Supplier(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    phone = models.IntegerField()
    email = models.EmailField(max_length=200)

views.py:

class getsuppliers(viewsets.ModelViewSet):
    queryset = Supplier.objects.all()
    serializer_class = GetSuppliersSerializer
    lookup_field = 'user'

serializers.py:

class GetSuppliersSerializer(serializers.ModelSerializer):
    class Meta:
        model=Supplier
        fields=['pk','user','name','email','phone']

Ошибка, которую я получаю:

ERROR: pm.models.Supplier.MultipleObjectsReturned: get() returned more than one Supplier -- it returned 10!

Я немного поискал об этой ошибке, и они говорят, что нужно использовать .filter вместо .all в представлении, но я не уверен, как заставить его возвращать ВСЕХ поставщиков для запрашиваемого пользователя, кажется, что это вернет только 1. Возможно, я ошибаюсь, надеюсь, у кого-то есть простое решение!

Вам придется установить model (внутри Meta) сериализатора на User, и добавить в поле supplier_set поле:

class GetUserSuppliersSerializer(serializers.ModelSerializer):
    supplier_set = SupplierSerializer(read_only=True, many=True)
    class Meta:
        model = User

class SuppliersSerializer(serializers.ModelSerializer):
    class Meta:
        model = Supplier
        fields = ['pk','user','name','email','phone']

А также измените viewset queryset, чтобы получить пользователей

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