简体   繁体   中英

Django rest framework Post request

I am creating django + react app and i want to pass data by django rest framework.

models.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)

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


views.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 []

My get request looks good because it returns value but it looks like something wrong is with AddressSerializer(data=request.data)

在此处输入图像描述

Your AdressSerializer does not contains all the fields required in Adress model.

AdressSerializer.create() internally calls Adress.create() , that inevitably raise ValidationError if do not pass value for each required field

class AddressSerializer(serializers.ModelSerializer):

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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