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