Возвращение набора запросов по многим полям в формате json

Я пытаюсь вернуть все результаты запроса "многие ко многим" (все клиенты, связанные с магазином, т.е. клиент может быть связан со многими магазинами). У меня есть следующие модели и сериализаторы

class Customer(models.Model):
    stores = models.ManyToManyField(Store)
    first_name = models.CharField(max_length=30, blank=True)
    last_name = models.CharField(max_length=30, blank=True)
    ...

class Store(models.Model):
    store_name = models.CharField(max_length=30, unique=True, null=True)
    ...

class CustomerSerializer(serializers.ModelSerializer):
    stores = serializers.PrimaryKeyRelatedField(queryset=Store.objects.all(), write_only=True, many=True)

    class Meta:
        model = Customer
        fields = ['stores', 'first_name', 'last_name', ...]

В моем представлении я хочу получить всех покупателей в магазине и вернуть их следующим образом:

def return_customers(request, *args):
    ...
    store = Store.objects.get(account__email=user)
    customers = Customer.objects.filter(stores__id=store['id'])
    print(customers)
    json_customers = CustomerSerializer(customers).data
    print(json_customers)

    context = {
        'customers': json_customers,
    }
    return Response(context, status=HTTP_200_OK)

Возвращается пустой объект {}

print(customers) дает: <QuerySet [<Customer: Michael>, <Customer: Naomi>, <Customer: Blessing>, <Customer: John>, <Customer: Cena>]>

print(json_customers) дает: {}

Если я пытаюсь вернуть customers вместо json_customers, я получаю сообщение об ошибке (Type Error): Object of type Customer is not JSON serializable

Если я попробую json_customers = CustomerSerializer(customers[0]).data, я получу только первого клиента (я хочу всех):

"customers": {
   "id": 7,
   "first_name": "Michael",
   "last_name": "",
   ...
},

Я пробовал это с другими моделями, в которых нет полей "многие ко многим", и все работает нормально. Я также добавил .values() и .values_list() в конец, но все равно возвращается пустота. SOS

клиентов несколько.

json_customers = CustomerSerializer(customers).data

изменить на

json_customers = CustomerSerializer(customers, many=True).data

относиться к

https://www.django-rest-framework.org/api-guide/serializers/#dealing-with-multiple-objects

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