Я пытаюсь понять сериализатор и то, как он работает, и передавать данные на веб-страницу, модель и вид. Насколько я понимаю, до сих пор сериализатор - это тот, кто обрабатывает и управляет потоком между моделью, представлением и взаимодействием пользователя с страницей. Это правильно?
Вот мой класс модели:
model.py
from django.db import models
# from django.contrib.auth.models import
class Meals(models.Model):
print('MealModel')
name = models.CharField(max_length=100)
price = models.DecimalField(decimal_places=2, max_digits=5)
def __str__(self):
return "{} {}".format(self.name, self.price)
class Order(models.Model):
print('Order Model')
table_id = models.IntegerField()
meal = models.ManyToManyField(Meals)
def __str__(self):
return "{} {}".format(self.table_id, self.meal.name)
view.py
from django.shortcuts import render
from rest_framework import viewsets
from cafe_app import serializers
from cafe_app import models
class MenuViewSet(viewsets.ModelViewSet):
serializer_class = serializers.MealSerializer
queryset = models.Meals.objects.all()
class OrderViewSet(viewsets.ModelViewSet):
print('OrderViewSet')
serializer_class = serializers.OrderSerializer
queryset = models.Order.objects.all()
print(queryset)
# queryset = []
serializer.py
from rest_framework import serializers
from cafe_app import models
class MealSerializer(serializers.ModelSerializer):
class Meta:
model = models.Meals
fields = ['id', 'name', 'price', ]
class OrderSerializer(serializers.ModelSerializer):
# meal = MealSerializer(many=True)
**meal = serializers.StringRelatedField(many=True)**
print(meal)
print('OrderSerializer')
class Meta:
model = models.Order
fields = ['table_id', 'meal', ]
def create(self, validated_data):
print(validated_data)
meals = validated_data.pop('meal')
print(meals)
print(type(meals))
t_id = models.Order.objects.filter(table_id=validated_data['table_id'])
if len(t_id) == 0:
instances = models.Order.objects.create(**validated_data)
# instances.save()
else:
instances = models.Order.objects.get(table_id=validated_data['table_id'])
# count =0
print(instances)
for meal in meals:
print(meal)
instances.meal.add(meal)
# count += 1
# instances.save()
print(instances)
# print(count)
return instances
В настоящее время я получаю вывод в виде:
Если я прокомментирую еды = serializers.StringRelatedField (many = True) из OrderSerializer, то я получаю вывод как:
Мой вопрос:
- Как отобразить значение даже для выбранных блюд, а также при отображении вывода цена еды и название вместо просто id. По сути, как я могу отображать оба вывода изображения одновременно?
- Как изменение одной строки так сильно влияет на то, является ли сериализатор как для чтения ввода, так и для вывода вывода?
Почему модель заказа имеет нет значения, так как при проверке модели заказа она дает
Order.objects.all ()
QuerySet [Заказ: 3 Нет, Заказ: 1 Нет, Заказ: 2 Нет, Заказ: 4 Нет, Заказ: 6 Нет]
Если набор запросов модели заказа для еды пуст, то откуда он отображает значение еды при выполнении набора запросов по заказу из orderserializer и orderviewset? и как я могу сохранить стоимость еды также в модели заказа.
Спасибо