Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django POST请求嵌套对象主键_Python_Django_Serialization_Nested - Fatal编程技术网

Python 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 │ │ __初始值 │ │ │ ├──

我对Django中带有序列化程序的嵌套对象的POST请求有一个问题:

我已经检查过了:

我在Django项目中按照以下体系结构创建了一些序列化程序:

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的回复,但它给了我另一个问题,我发布了这个问题,如果你能看一下就好了:)