【发布时间】:2021-01-23 01:04:12
【问题描述】:
抱歉,我是 django rest 框架的新手,遇到了一些麻烦。
我正在使用一个嵌套序列化程序,我想为其添加一个 create() 方法。
在尝试这样做时:我创建了以下 serializers.py:
class ASerializer(serializers.ModelSerializer):
class Meta:
model = A
fields = (
"id",
"name",
)
class BSerializer(serializers.ModelSerializer):
class Meta:
model = B
fields = (
"id",
"name",
)
class CSerializer(serializers.ModelSerializer):
class Meta:
model = C
fields = (
"id",
"name",
)
class NSerializer(serializers.ModelSerializer):
a = ASerializer()
b = BSerializer()
c = CSerializer()
class Meta:
model = N
fields = (
"id",
"a",
"b",
"c",
"description",
)
def create(self, validated_data):
a_data= validated_data.pop("a")
b_data= validated_data.pop("b")
c_data= validated_data.pop("c")
n = N.objects.create(**validated_data)
for one in a.data:
A.objects.create(n=n, **one)
for two in b.data:
B.objects.create(n=n, **two)
for three in c.data:
C.objects.create(n=n, **three)
return n
我希望能够对以下格式的数据执行 POST:
{
"id": 1,
"a": {
"id": 1,
"name": "apple"
},
"b": {
"id": 5,
"name": "red"
},
"c": {
"id": 2,
"name": "medium"
},
"description": "a description."
}
我的模型是通过外键链接的,我可以在没有我的 django 管理端点中的 create() 的情况下执行请求(将在此处发布我的 models.py,但代码对于一个问题来说已经相当大了)但我想知道为什么我收到以下错误:
TypeError: django.db.models.manager.BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_method() argument after ** must be a mapping, not str
据我了解,鉴于我的管理员对我的序列化程序没有管辖权,因此我的管理员可以正常工作是有道理的。我相信这意味着错误就在我的 serializers.py 中。任何帮助将不胜感激,非常感谢!
【问题讨论】:
标签: python django django-models django-rest-framework django-serializer