首页 > 解决方案 > 如何接受整数列表作为输入并为 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 正常工作。谢谢

标签: djangodjango-modelsdjango-rest-frameworkdjango-viewsdjango-serializer

解决方案


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


推荐阅读