"This field is required" 在 Django REST 框架嵌套序列化程序



我有 2 个序列化程序,

class AssetTypeChoiceSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(required=False)
class Meta:
model = AssetTypeChoice
fields = ["id", "probe", "choice", "choice_name"]
read_only_fields = ("probe",)

和父序列化程序

class ProbeSerializer(serializers.ModelSerializer):
asset_type_choices = AssetTypeChoiceSerializer(many=True)
class Meta:
model = Probe
fields = [
"id",
"city",
"street",
"neighborhood",
"rooms_from",
"rooms_to",
"price_from",
"price_to",
"asset_type_choices",
]
def create(self, validated_data):
asset_type_choices = validated_data.pop("asset_type_choices")
probe = Probe.objects.create(**validated_data)
for choice in asset_type_choices:
AssetTypeChoice.objects.create(**choice, probe=probe)
return probe

每次我发布以创建新探针时,我都会收到错误

{ "asset_type_choices":[ "此字段为必填项。" ] }

当我删除资产类型选择序列化程序并尝试发布时,我成功地创建了一个新探测器。

这是我发帖时的原始信息:

{
"city": "test",
"street": "",
"neighborhood": "",
"rooms_from": 0,
"rooms_to": 0,
"price_from": 0,
"price_to": 0,
"asset_type_choices": [
{"id": 1, "choice": 1, "choice_name": "All"},
{"id": 2, "choice": 1, "choice_name": "All"},
],
}

我做错了什么?

所以问题是当我从纯 django 更改我的用法时 到 Django rest 框架。 我的视图返回request.data而不是serializer.data:

这是我之前的代码:

def probe_list(request):
if not request.user.is_authenticated:
return Response({"Error": "User must be logged in"}, status=status.HTTP_401_UNAUTHORIZED)
if request.method == 'GET':
qs = Probe.objects.all()
serializer = ProbeSerializer(qs, many=True)
return Response(request.data, status=status.HTTP_200_OK)
if request.method == 'POST':
serializer = ProbeSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
serializer.save(user=request.user)
return Response(request.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

这是我之后的代码:

def probe_list(request):
if not request.user.is_authenticated:
return Response({"Error": "User must be logged in"}, status=status.HTTP_401_UNAUTHORIZED)
if request.method == 'GET':
qs = Probe.objects.all()
serializer = ProbeSerializer(qs, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
if request.method == 'POST':
serializer = ProbeSerializer(data=request.data)
if serializer.is_valid(raise_exception=True):
serializer.save(user=request.user)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

新手错误,但仍然是错误。

最新更新