我有 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)
新手错误,但仍然是错误。