Python 3.x 如何在Django Rest框架上显示多模型关系变量的值
我是django的新手,正在苦苦挣扎,我浏览了谷歌,但找不到任何有帮助的东西 这是我的模型:Python 3.x 如何在Django Rest框架上显示多模型关系变量的值,python-3.x,django-models,django-rest-framework,django-serializer,django-related-manager,Python 3.x,Django Models,Django Rest Framework,Django Serializer,Django Related Manager,我是django的新手,正在苦苦挣扎,我浏览了谷歌,但找不到任何有帮助的东西 这是我的模型: from django.db import models # from django.contrib.auth.models import class Order(models.Model): table_id = models.IntegerField(unique=True) meal = models.ManyToManyField('meals') # Meal
from django.db import models
# from django.contrib.auth.models import
class Order(models.Model):
table_id = models.IntegerField(unique=True)
meal = models.ManyToManyField('meals')
# Meal = models.ForeignKey('Meals',on_delete=models.CASCADE)
@property
def total_price(self):
price = self.meal.objects.all().aggregate(total_price=models.Sum('meals__price'))
return price['total_price']
class Meals(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(decimal_places=2, max_digits=5)
这是我的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(read_only=True,many=True)**
class Meta:
model = models.Order
fields = ['table_id','meal',]
当我注释Mean=MealSerializer(只读=True,多个=True)行时,它将输入显示为表格id和Mean,其中Mean值为Mean对象(1),Mean对象(2)
我的问题是:
\uuu str\uu
方法
print
语句
下面是我为1和2建议的更正
# models.py
from django.db import models
class Order(models.Model):
table_id = models.IntegerField(unique=True)
meal = models.ManyToManyField('meals')
class Meals(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(decimal_places=2, max_digits=5)
def __str__(self):
# This method defines what the string representation an instance.
return f'{self.name}: ${self.price}'
# serializers.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):
total_price = serializers.FloatField(read_only=True)
meal = MealSerializer(read_only=True,many=True)
class Meta:
model = models.Order
fields = ['table_id','meal', 'total_price']
# views.py
class OrderView(ViewSet): # or View.
queryset = Order.objects.annotate(
total_price=Sum('meal__price')
)
嗨,pkd我知道这让你很困惑。对大多数人来说都是这样。但是如果你练习并阅读文档和教程,它会变得更容易。对于第2点,检查序列化程序方法字段。对于3,在pycharm中使用调试器。我不能理解第一点。