首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Rest - Posted数据在外键引用的表中创建新行

Django Rest - Posted数据在外键引用的表中创建新行
EN

Stack Overflow用户
提问于 2021-01-05 16:45:14
回答 1查看 40关注 0票数 0

我正在尝试将数据发布到我的订单模型中。它有几个外键。当我尝试发布数据时,它也在尝试在引用的模型中创建对象。我的models.py:

代码语言:javascript
复制
from django.db import models
from django.contrib.auth.models import User
from accounts.models import Profile

class Nursery(models.Model):
    name = models.CharField(max_length=30,unique=True)
    state = models.CharField(max_length=40)
    city = models.CharField(max_length=40)
    profile = models.OneToOneField(Profile,on_delete=models.CASCADE)


class Plants(models.Model):
    name = models.CharField(max_length=30,unique=True)
    image = models.ImageField(upload_to='static/plants')
    price = models.IntegerField()
    nursery = models.ForeignKey(Nursery,on_delete=models.CASCADE)

class Order(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    product = models.ForeignKey(Plants,on_delete=models.CASCADE)
    date_ordered = models.DateTimeField(auto_now=True)
    order_id = models.UUIDField(auto_created=True)
    is_purchased = models.BooleanField(default=False)
    cost = models.IntegerField()
    quantity = models.IntegerField()
    nursery = models.ForeignKey(Nursery,on_delete=models.CASCADE)

因此,我尝试将数据发布到订单模型中,它给出了错误Plant name already exists,这意味着它还试图在植物和苗木模型中创建一行。我的serializers.py:

代码语言:javascript
复制
from .models import Plants,Order,Nursery
from rest_framework import serializers

class NurserySerializer(serializers.ModelSerializer):
    class Meta:
        model = Nursery
        fields = "__all__"

class PlantSerializer(serializers.ModelSerializer):
    nursery = NurserySerializer()
    # nursery = NurserySerializer()
    class Meta:
        model = Plants
        fields = ['name', 'price','image','nursery']


class OrderSerializer(serializers.ModelSerializer):
    user_name = serializers.CharField(source='user.username', read_only=True)
    product = PlantSerializer()
    nursery = serializers.CharField(source='nursery.name', read_only=True)

    class Meta:
        model = Order
        fields = ['user_name', 'product','date_ordered','order_id','is_purchased','cost','quantity','nursery']

Views.py:

代码语言:javascript
复制
class PostOrder(APIView):
    def post(self, request, format=None):
       print(request.data)
       serializer = OrderSerializer(data=request.data)
       if serializer.is_valid():
           serializer.save()
           return Response(serializer.data, status=status.HTTP_201_CREATED)
       return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-05 17:48:58

你能做到的,

对不起,我不明白您想在哪里创建新行

代码语言:javascript
复制
from .models import Plants,Order,Nursery
from rest_framework import serializers

class NurserySerializer(serializers.ModelSerializer):
    class Meta:
        model = Nursery
        fields = "__all__"

class PlantSerializer(serializers.ModelSerializer):
    nursery = NurserySerializer(read_only=True)
    # nursery = NurserySerializer()
    class Meta:
        model = Plants
        fields = ['name', 'price','image','nursery']


class OrderSerializer(serializers.ModelSerializer):
    user = serializers.SlugRelatedField(read_only=True,slug_field='username')
    product = PlantSerializer(read_only=True)
    nursery = NurserySerializer(read_only=True)

    class Meta:
        model = Order
        fields = ['user', 'product','date_ordered','order_id','is_purchased','cost','quantity','nursery']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65575604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档