django - Django RF - 带有 ModelViewSet 的嵌套序列化程序
问题描述
我有嵌套序列化程序的问题。在 Shell 中一切正常,但是当我发出 HTTP 请求时,总是出现“必填字段”之类的错误。
楷模:
class Product(models.Model):
index = models.CharField(max_length=12, unique=True, db_index=True)
quantity = models.PositiveIntegerField(default=0)
def __str__(self):
return self.index
class Name(models.Model):
product = models.ForeignKey(Product, related_name='names', on_delete=models.CASCADE, null=True)
language = models.CharField(max_length=50, default="name_pl")
title = models.CharField(max_length=300, blank=True, null=True)
def __str__(self):
return self.language
序列化器:
class ProductSerializer(serializers.ModelSerializer):
names = NameSerializer(many=True)
class Meta:
model = Product
fields = ["index", "quantity", "names"]
def create(self, validated_data):
names = validated_data.pop('names')
product = Product.objects.create(**validated_data)
for name in names:
Name.objects.create(product=product, **name)
return product
意见:
class NameView(viewsets.ModelViewSet):
queryset = Name.objects.all()
serializer_class = NameSerializer
filter_backends = [DjangoFilterBackend, filters.SearchFilter]
filterset_fields = ('id',)
search_fields = ['id']
class ProductView(viewsets.ModelViewSet):
queryset = Product.objects.all()
serializer_class = ProductSerializer
filter_backends = [DjangoFilterBackend, filters.SearchFilter]
filterset_fields = ('id',)
search_fields = ['id']
permission_classes = (CustomDjangoModelPermissions,)
我正在尝试发布数据:
data = {
"index": "11111",
"quantity": 1213,
"names": [
{"language": "DE","title": "GER"},
{"language": "CZ","title": "CZZ"}
]
}
回应:
names field required
我试图覆盖视图中的创建,以“查看”有什么问题:
def create(self, request):
data = request.data
serializer = ProductSerializer(data=data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=201)
return Response(request.data, status=400)
然后我得到:
{'index': '11111', 'quantity': '1213', 'names': 'title'}
所以它不能发送所有数据,所以它不能验证。需要帮助,请;)
解决方案
问题解决了:
只是忘记添加请求:
data = json.dumps(data)
推荐阅读
- python - 使用 opencv 或创建线性渐变蒙版
- charts - 如何阻止系列在 Google 折线图中以某个值绘制
- c# - 如何初始化一个 bouncycastle BigInteger?
- machine-learning - RuntimeError:为 BertModel 加载 state_dict 时出错
- ubuntu - 未连接:潜在的安全问题
- jmeter - 在 JMeter 中使用 Beanshell 采样器将变量写入 txt/csv 文件
- c# - 如何记录选定的 ASP.NET Core MVC 路由?
- javascript - 如何使用 For 循环将多个对象写入数组?
- iot - 如何在 Fiware 中管理多个 IoT 代理
- php - 如果 php 中存在值,则禁用内联编辑