gpt4 book ai didi

django - 如何在 django rest 框架中存储外键字段?

转载 作者:行者123 更新时间:2023-12-03 14:40:06 32 4
gpt4 key购买 nike

我想创建一个订单,我正在尝试保存用户的牛奶订单。基本上,用户必须在下订单时选择他们想要的牛奶类型。在我看来我应该怎么做?我有点困惑。下面的代码什么也没给我,数据没有保存。我该怎么办,有人可以帮忙吗?

这是我的文件。
模型.py

MILK_CHOICES = (
('C', 'COW'),
('B', 'BUFFALO'),
('FC', 'FULL CREAM')
)

class MilkType(models.Model):
type = models.CharField(max_length = 20, choices = MILK_CHOICES, default = MILK_CHOICES[0][1])
quantity = models.PositiveIntegerField() # Stock
description = models.CharField(max_length = 100)

class Order(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
milk_choice = models.ForeignKey(MilkType)
qty = models.PositiveIntegerField(default = 1)

序列化程序.py
class UserSerializer(serializers.ModelSerializer):
orders = serializers.PrimaryKeyRelatedField(many=True, queryset=Order.objects.all())

class Meta:
model = CustomUser
fields = ('id', 'username', 'email')

class MilkTypeSerializer(serializers.ModelSerializer):

class Meta:
model = MilkType
fields = ('id', 'type', 'quantity', 'description')

class OrderSerializer(serializers.ModelSerializer):
user = serializers.ReadOnlyField(source = 'user.username')

class Meta:
model = Order
fields = ('id', 'user', 'milk_choice', 'qty')

View .py
class OrderList(APIView):

def get(self, request, format = None):
orders = Order.objects.all()
serializer = OrderSerializer(orders, many = True)
return Response(serializer.data)

def post(self, request, format = None):
serializer = OrderSerializer(data = request.data)

if serializer.is_valid():
serializer.save(user = request.user)
return Response(serializer.data, status = status.HTTP_201_CREATED)
return Response(serializer.errors, status = status.HTTP_400_BAD_REQUEST)

最佳答案

在您的 OrderSerializer 中,为 milk_choice 定义序列化程序字段为 MilkTypeSerializer。

class OrderSerializer(serializers.ModelSerializer):
user = serializers.ReadOnlyField(source = 'user.username')
milk_choice = MilkTypeSerializer()

class Meta:
model = Order
fields = ('id', 'user', 'milk_choice', 'qty')

关于django - 如何在 django rest 框架中存储外键字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37628665/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com