python - Django 休息框架发布请求
问题描述
我正在创建 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
模型中所需的所有字段。
AdressSerializer.create()
内部调用,如果不为每个必需的值传递值,则Adress.create()
不可避免地会引发ValidationError
field
class AddressSerializer(serializers.ModelSerializer):
class Meta:
model = Address
fields = ('street_address','apartment_address','country')
# need 'username' and 'adress_type'
推荐阅读
- mediawiki - MediaWiki MonoBook 皮肤仅显示正文部分
- java - 构建 Android Bundle 的问题 - 引发错误“文件 'root/lib/commons-io-2.4.jar' 使用保留文件或目录名称 'lib'”
- java - 如何制作自定义 Swing 容器?
- java - 变量前面的减号是否使第一个变量为负?
- javascript - 在对象的对象内部搜索并替换值
- css - 当属性值更新时,React 子组件 css 停止工作
- ruby - Ruby 中所有魔法指令的列表
- php - PHP 启动:composer 安装/更新后打开 index.php 失败
- r - 修复丢失的数据 - 如何将表格转换为与 KalmanRun 一起使用的 ts 对象?
- vba - Append a variant of strings to an empty variant array