django - 如何接受整数列表作为输入并为 django rest 框架中列表中的每个项目创建一个对象?
问题描述
我必须传递一个请求正文,如下所示。
{
"user_id": 1,
"skill": [
{
"id":1
},
{
"id":2
},
{
"id":3
}
]
}
模型看起来像这样:
class UserSkill(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
skill = models.ForeignKey(Skills, on_delete=models.CASCADE)
class Meta:
db_table = "user_skill"
序列化器看起来像:
class UserSkillSerializer(serializers.ModelSerializer):
class Meta:
model = UserSkill
fields = ['user', 'skill']
视图集的完成方式如下:
class UserSkillViewSet(viewsets.ModelViewSet):
queryset = UserSkill.objects.all()
serializer_class = UserSkillSerializer
我必须将上述请求正文传递给此 api,并且对于“技能”中的每个元素,我必须为模型“UserSkill”创建一个对象。
有人请帮助我进行更改以使此 api 正常工作。谢谢
解决方案
skill
将模型中的字段更改UserSkill
为 ManyToManyField。喜欢:
class UserSkill(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
skill = models.ManyToManyField(Skills)
class Meta:
db_table = "user_skill"
你需要像这样传递一个请求体。
{
"user": 1,
"skill": [1, 2, 3]
}
序列化程序和视图类没有任何更改,您的要求适用。
如果您想使用 ForeignKey,您需要在您的视图中进行一些实现,并且您必须覆盖create
.ModelViewSet
推荐阅读
- python - Python 简化了 if 和循环
- arrays - Mongoose 查询数组...改变数组的元素
- database - 基于 Postgres 数据库的 To_date 函数错误
- python - Scipy 优化与一维矩阵与向量输入 st 的行为不同。一维矩阵解是错误的
- c# - C#WPF 复选框
- apache-spark - Spark结构化流中同一数据帧/数据集上的多个操作/聚合
- javascript - 如果上一页不在我的域中,则用户返回到主页的历史记录
- python-3.x - 无法停止 aiohttp websocket 服务器
- python - ModuleNotFoundError:没有名为“urllib.request”的模块;'urllib' 不是 Visual Studio 代码的包
- linux - 如何对压缩的非标准文本文件的内容进行 grep