加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 13:12:28 所属栏目:Python 来源:网络整理
导读:我想创建一个订单,我正在尝试用户保存订单.基本上,用户在下订单时必须选择他们想要的牛奶类型.在我看来,我该怎么做?我有点困惑.以下代码没有给我任何东西,数据没有保存.我该怎么办,有人可以帮忙吗? 这是我的文件. models.py MILK_CHOICES = (('C','COW'),(
我想创建一个订单,我正在尝试用户保存订单.基本上,用户在下订单时必须选择他们想要的牛奶类型.在我看来,我该怎么做?我有点困惑.以下代码没有给我任何东西,数据没有保存.我该怎么办,有人可以帮忙吗?

这是我的文件.
models.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)

serializers.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')

views.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,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','qty')

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读