我是django的新手,在挣扎中,我在google上浏览过,但是找不到任何可以帮助的东西。
这是我的模型:
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',]
当我注释顿饭= MealSerializer(read_only = True,many = True)行时,它将输入显示为table_id和顿饭,其中顿饭值分别为顿饭对象(1),均值对象(2)...。
我的问题:
谢谢。
问题来源:stackoverflow
如何显示进餐对象值而不是它作为对象。
在用餐时使用str
方法。
如何在视图/序列化器中使用total_price方法。
在视图的查询集中定义注释,然后将自定义字段添加到序列化程序。除非它是一次性的,否则请勿将其添加到模型中。使用它的方式效率很低,因为它将为列表视图生成许多查询。
如何看待流程,例如流程从哪个类到哪个类调用的流向以及我收到的结构的类型和值是什么。
在PyCharm,PDB或经典的print
语句等IDE中使用调试器。
以下是我对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')
)
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。