Возвращение набора запросов по многим полям в формате 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