簡體   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