【问题标题】:creating new object instead of assigning existing object POST in DRF在 DRF 中创建新对象而不是分配现有对象 POST
【发布时间】:2014-03-14 11:46:03
【问题描述】:

最近我们已经从传统视图转移到 API 视图,因此开始实施 DRF。 所以,我的主要问题是我有一个模型与另一个模型的外键 说

class Task(model.Models):
   created_by=models.ForeignKey(User, null=true, blank=true)
   assignees = models.ManyToManyField(User, related_name="assignees", blank=True)

class UserSerializer(serializer.ModelSerializer):
   class Meta:
       model = User

class TaskSerializer(serializer.ModelSerializer):
   created_by = UserSerializer()
   assignees = UserSerializer(many=True, required=False)
   class Meta:
       model=Task

现在,当我使用 User(pk=10) 已经存在的用户创建任务时。 创建一个新用户,而不是分配现有用户。

here is my input:
{
  "created_by": {
    "id": 10,
    "email": "xyz@gmail.com",
    "name": "abc def"
  },
  "assignees": []
}
here is the output:
{
  "id":23,
  "created_by": {
    "id": 11,
    "email": "xyz@gmail.com",
    "name": "abc def"
  },
  "assignees": [
  ]
}

从 Linovia 那里得到了一些帮助:用这个 :- https://gist.github.com/xordoquy/78a2d0e2ec85e2d7aadf 但是测试用例失败了。 任何人都可以建议我我需要它。

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    可能使用PrimaryKeyRelatedField 可以完成这项工作。

    class TaskSerializer(serializer.ModelSerializer):
        created_by = serializeres..PrimaryKeyRelatedField()
        assignees = UserSerializer(many=True, required=False)
    
        class Meta:
            model=Task
    

    并将您的 json 更新为:

    {
      "created_by": 10,
      "assignees": []
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-25
      • 2015-02-02
      • 2019-03-12
      • 2019-10-21
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 2017-04-12
      相关资源
      最近更新 更多