创建新对象而不是在DRF中分配现有对象POST

时间:2014-03-14 11:46:03

标签: python django django-rest-framework

最近我们已经从传统视图转向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 但是测试用例失败了。 任何人都可以建议我不需要它。

1 个答案:

答案 0 :(得分:0)

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

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

    class Meta:
        model=Task

将你的json更新为:

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