python - django rest framework - 总是插入,从不更新

标签 python django rest frameworks django-rest-framework

我希望能够通过 POST 更新用户记录。但是,id 始终为 NULL。即使我传递了 id,它似乎也被忽略了

查看代码:

JSON 发布:

{
    "id": 1, 
    "name": "Craig Champion", 
    "profession": "Developer", 
    "email": "craig@isai.co.uk"
}

@api_view(['POST'])
def get_purchase(request):
    """
    Gets purchase records for a user

    Purchase collection is returned
    """

    user = User();
    serializer = UserSerializer(user, data=request.DATA)

    if serializer.is_valid():

       #The object ALWAYS has ID = nothing at this point

        serializer.save()

        return Response(serializer.data, status=status.HTTP_200_OK)

    else:
        return Response(serializer.errors,   status=status.HTTP_400_BAD_REQUEST)

模型序列化器

class UserSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = ('id', 'name', 'profession', 'email', 'password', )
        write_only_fields = ('password' , )

模型

class User(models.Model):
    name = models.CharField(max_length=30, null=True, blank=True)
    profession = models.CharField(max_length=100, null=True, blank=True)
    email = models.EmailField()
    password = models.CharField(max_length=20, null=True, blank=True)


    def __unicode__(self):
        return self.name

我如何强制更新 savechanges 并查看 ID?

最佳答案

您需要使用 partial=True 来更新包含部分数据的行:

serializer = UserSerializer(user, data=request.DATA, partial=True)

来自 docs :

By default, serializers must be passed values for all required fields or they will throw validation errors. You can use the partial argument in order to allow partial updates.

关于python - django rest framework - 总是插入,从不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21412324/

相关文章:

python - 使用 Python 在 Visual Studio Code 中调试不起作用

python - 处理上传的图像 zip 时出现 HTTP 504

php - 如何使用 RESTclient Addon Firefox 为 restful api 身份验证设置 header

ios - REST API iOS 开发

python - Pandas 的 Mypy/typeshed stub

Python 路径字符串除了最后一个斜杠外添加了一个额外的斜杠

django 将旧日期时间字段转换为新的 1.4 日期时间,并在 SQLite 中感知时区

python - django 2.2 中的 UniqueConstraint 不会引发 ValidationError

java - Jersey 类路径扫描示例 jersey.config.server.provider.classpath

Python:如何合并具有相同名称 "Ocode"或“数据帧中的代码”的行