繁体   English   中英

Django rest 框架 发布请求

[英]Django rest framework Post request

我正在创建 django + react 应用程序,我想通过 django rest 框架传递数据。

模型.py

class User(AbstractUser):

    def __str__(self):
        return self.username
class Address(models.Model):
    username = models.ForeignKey(User,related_name='address',on_delete=models.CASCADE)
    street_address = models.CharField(max_length=100)
    apartment_address = models.CharField(max_length=100)
    country = CountryField(multiple=False)
    address_type = models.CharField(max_length=1, choices=ADDRESS_CHOICES)
    default = models.BooleanField(default=False)
    class Meta:
        verbose_name_plural = 'Addresses'

    def __str__(self):
        return '%s %s %s %s' % (self.street_address, self.apartment_address, self.country, self.address_type)

序列化程序.py

class AddressSerializer(serializers.ModelSerializer):

    class Meta:
        model = Address
        fields = ('street_address','apartment_address','country')
class UserSerializer(serializers.ModelSerializer):
    address = serializers.StringRelatedField(many=True)
    class Meta:
        model= User
        fields = ('email','username','password','address')``` 


视图.py

class UserViewSet(viewsets.ModelViewSet):
    serializer_class=UserSerializer
    queryset = User.objects.all()

class AddressViewSet(APIView):


    def get(self, request, format=None):
        address = Address.objects.all()
        serializer = AddressSerializer(address, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = AddressSerializer(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)
    @classmethod
    def get_extra_actions(cls):
        return []

我的 get 请求看起来不错,因为它返回值,但AddressSerializer(data=request.data)看起来有问题

在此处输入图像描述

您的AdressSerializer不包含Adress model 中所需的所有字段。

AdressSerializer.create()内部调用Adress.create() ,如果不为每个必填field传递值,则不可避免地会引发ValidationError

class AddressSerializer(serializers.ModelSerializer):

   class Meta:
       model = Address
       fields = ('street_address','apartment_address','country') 
       # need 'username' and 'adress_type'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM