Python Django POST请求嵌套对象主键
我对Django中带有序列化程序的嵌套对象的POST请求有一个问题: 我已经检查过了:Python Django POST请求嵌套对象主键,python,django,serialization,nested,Python,Django,Serialization,Nested,我对Django中带有序列化程序的嵌套对象的POST请求有一个问题: 我已经检查过了: 我在Django项目中按照以下体系结构创建了一些序列化程序: EP_项目 │ │ └───巨蟒 │ db.sqlite3 │ manage.py │ __初始值 │ ├───ep │ │ 管理员 │ │ apps.py │ │ models.py │ │ tests.py │ │ url.py │ │ __初始值 │ │ │ ├──
EP_项目
│
│
└───巨蟒
│ db.sqlite3
│ manage.py
│ __初始值
│
├───ep
│ │ 管理员
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ url.py
│ │ __初始值
│ │
│ ├───迁移
│ │
│ ├───模型
│ │ │ 型号_aa.py
│ │ │ 模型_ap.py
│ │ │ 2014年4月型号
│ │ │ 模型_as.py
│ │ │ 型号_at.py
│ │ │ 模型_b.py
│ │ │ 模型_be.py
│ │ │ 模型_se.py
│ │ │ 模型_.py
│ │ │ model_user.py
│ │ │ __初始值
│ │
│ ├───串行器
│ │ │ 序列化程序\u ap.py
│ │ │ 序列化程序\u user.py
│ │ │ __初始值
│ │
│ ├───意见
│ │ 视图a.py
│ │ 视图_user.py
│
├───巨蟒
│ asgi.py
│ 设置.py
│ url.py
│ wsgi.py
│ __初始值
以下是我的序列化程序文件:
序列化程序\u user.py
:
从rest\u框架导入序列化程序
from..models.model\u用户导入用户
类UserIndexSerializer(serializers.ModelSerializer):
类元:
模型=用户
字段=[
“名字”,
“姓”
]
类UserDetailsSerializer(serializers.ModelSerializer):
类元:
模型=用户
字段='\uuuu所有\uuuu'
我尝试在下一个序列化程序中创建自定义创建方法:
序列化程序\u ap.py
:
从rest\u框架导入序列化程序
从..models.model\u ap导入ap
从.serializers\u用户导入*
类APIndexSerializer(serializers.ModelSerializer):
#user=UserIndexSerializer()
类元:
型号=AP
字段=[
“id”,
“用户”,
“姓名”
]
def创建(自我验证的_数据):
user=user.objects.get(pk=validated_data).id
#user=user.objects.only('id').get(pk=validated\u数据)
#user\u id=user[“id”]
#user=user.objects.filter(pk=validated\u data.pop(“id”)
#实例=设备.objects.create(**已验证的_数据)
ap=ap.objects.create(User=User\u id,**已验证的\u数据)
返回ap
类APDetailsSerializer(serializers.ModelSerializer):
类元:
型号=AP
字段='\uuuu所有\uuuu'
以下是我的看法:
视图\u a.py
:
从rest\u框架导入泛型
从..models.model\u ap导入ap
来自..serializers.serializers\u ap导入(
APIndexSerializer,
阿普塞利泽
)
类APIndex(generics.ListCreateAPIView):
“”“列出所有ap,或创建新ap。”“”
queryset=AP.objects.all().order_by('name'))
serializer_class=APIndexSerializer
类APDetails(泛型.RetrieveUpdatedStroyapView):
“”“检索、更新或删除ap实例。”“”
queryset=AP.objects.all()
序列化程序\u class=APDetailsSerializer
视图\u user.py
:
从rest\u框架导入泛型
from..models.model\u用户导入用户
来自..serializers.serializers\用户导入(
UserIndexSerializer,
用户详细信息序列化程序
)
类UserIndex(generics.ListCreateAPIView):
“”“列出所有用户,或创建新用户。”“”
queryset=User.objects.all()
serializer_class=UserIndexSerializer
类用户详细信息(generics.RetrieveUpdatedStroyapiView):
“”“检索、更新或删除用户实例。”“”
queryset=User.objects.all()
序列化程序\u class=UserDetailsSerializer
问题是,当我通过postman发布AP时,它不会获取用户ID,而只获取用户对象本身。
正如您在serializers\u ap.py
中的create方法中所看到的,我尝试了3种不同的方法来提取ID,但都没有成功
邮递员要求:
{
“用户”:1,
“名称”:“最大AP 01”
}
邮递员回应:
字段'id'需要一个数字,但得到了{'user':,'name':'Max AP 01'}。
因此,我有3个问题:
- 我是否缺少一些基本的东西来获取对象的ID
- 在请求正文中提供用户主键的PUT请求 很好,但不是在POST请求中,为什么
- 为了使调试更容易,我尝试了打印,但没有成功 序列化程序中的变量,在Postman响应中没有显示任何内容。 有办法看到他们吗
谢谢 据我所知,AP模型具有字段
user = models.ForeignKey('User')
如果是,则可以尝试将序列化程序中的字段更改为
fields = [
'user_id', #or just 'user'
'name'
]
然后就
ap = AP.objects.create(**validated_data)
return ap
谢谢@marcustas的回复,但它给了我另一个问题,我发布了这个问题,如果你能看一下就好了:)