Django Rest Framework:创建对象后禁用字段更新

2024-01-01

我正在尝试通过 Django Rest Framework API 调用使我的用户模型 RESTful,以便我可以创建用户并更新他们的个人资料。

但是,当我与用户进行特定的验证过程时,我不希望用户在创建帐户后能够更新用户名。我尝试使用 read_only_fields,但这似乎在 POST 操作中禁用该字段,因此我无法在创建用户对象时指定用户名。

我该如何实施呢?现在存在的 API 的相关代码如下。

class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('url', 'username', 'password', 'email')
        write_only_fields = ('password',)

    def restore_object(self, attrs, instance=None):
        user = super(UserSerializer, self).restore_object(attrs, instance)
        user.set_password(attrs['password'])
        return user


class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    serializer_class = UserSerializer
    model = User

    def get_permissions(self):
        if self.request.method == 'DELETE':
            return [IsAdminUser()]
        elif self.request.method == 'POST':
            return [AllowAny()]
        else:
            return [IsStaffOrTargetUser()]

Thanks!


看来您需要为 POST 和 PUT 方法使用不同的序列化器。在 PUT 方法的序列化器中,您可以仅删除用户名字段(或将用户名字段设置为只读)。

class UserViewSet(viewsets.ModelViewSet):
    """
    API endpoint that allows users to be viewed or edited.
    """
    serializer_class = UserSerializer
    model = User

    def get_serializer_class(self):
        serializer_class = self.serializer_class

        if self.request.method == 'PUT':
            serializer_class = SerializerWithoutUsernameField

        return serializer_class

    def get_permissions(self):
        if self.request.method == 'DELETE':
            return [IsAdminUser()]
        elif self.request.method == 'POST':
            return [AllowAny()]
        else:
            return [IsStaffOrTargetUser()]

检查这个问题django-rest-framework:同一 URL 中独立的 GET 和 PUT 但不同的泛型视图 https://stackoverflow.com/questions/22104487/django-rest-framework-independent-get-and-put-in-same-url-but-different-generic/22107326#22107326

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django Rest Framework:创建对象后禁用字段更新 的相关文章

  • 使用 Spring 的 REST 多部分混合请求(文件+json)

    我需要将一个文件和一个 json 一起发送到我的 Spring 控制器 我有以下控制器类 Controller RequestMapping perform public class PerformController RequestMap
  • 如何在 Django Rest 框架中编写“删除”操作的测试

    我正在为 Django Rest Framework API 编写测试 我一直在测试 删除 我对 创建 的测试工作正常 这是我的测试代码 import json from django urls import reverse from re
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • 如何更改 Django allauth 中的“帐户已存在”消息?

    当尝试使用社交帐户登录且已存在使用该电子邮件的帐户时 会显示以下消息 An account already exists with this e mail address Please sign in to that account fir
  • Heroku 与 django 通道的正确 procfile/要求是什么?

    tl dr django 频道应用程序在本地使用 manage py runserver 运行 但不在 heroku 上运行 我是 django 通道的新手 尝试使用 heroku 通道部署一个非常基本的 django 应用程序 我最初使用
  • TEST 镜像默认数据库但没有数据

    我正在尝试对我的 Django 应用程序进行一些测试 我使用了数据库镜像作为测试数据库 当我尝试运行一些测试时 默认数据库 中的数据似乎在镜像测试数据库中不可用 default sqlite ENGINE django db backend
  • 如何将 max_length 添加到 allauth 用户名

    我使用 Django allauth 作为我的 Django 站点的用户帐户框架 文档显示有一个ACCOUNT USERNAME MIN LENGTH http django allauth readthedocs io en latest
  • 如何覆盖 Django 的默认管理模板和布局

    我正在尝试覆盖 Django 的默认模板 现在只有base site html 我正在尝试更改 django 管理文本 我做了以下事情 我在我的应用程序目录中创建了一个文件夹 opt mydjangoapp templates admin
  • Django通用外键和select_相关

    我试图使用与通用外键的关系来选择模型 但它没有按预期工作 我认为用代码可以更好地说明和理解 class ModelA models Model created models DateTimeField auto now add True c
  • 使用嵌套的 hashmap 参数发送 volley 请求

    我正在使用 android volley 框架向我的服务器发送 jsonobject 请求 get 请求工作正常 现在我想发送一个带有请求参数的 post 请求 该请求参数是嵌套的 hashmap 我重写 getparams 方法 但它期望
  • 如何在 Django 中使我的模型字段可选?

    我正在尝试遵循底部的完整示例 https docs djangoproject com en dev topics auth customizing https docs djangoproject com en dev topics au
  • 测试使用 South 迁移的 Django 应用程序

    我正在尝试为使用 South 迁移的 Django 应用程序创建一些功能测试 最终 我还将创建斜纹测试 当我尝试运行现有测试时 由于南方迁移出现问题 测试数据库未成功创建 58 次迁移中的第 7 次失败 看起来 为了测试的目的 最好从 Dj
  • 获取 Parse Analytics 自定义仪表板

    是否可以使用 Javascript 或 REST API 从 Parse 获取应用程序分析 我想在我自己的仪表板中显示下载数量和自定义事件 不可以 您只能通过 REST API 推送 https parse com docs rest ht
  • 如何在Django项目中使用PostgreSQL的存储过程或函数

    我正在开发一个 Django 项目 我决定在 PostgreSQL 中编写逻辑代码 而不是用 Python 编写 因此 我在 PostgreSQL 中创建了一个存储过程 例如 存储过程如下所示 create or replace proce
  • Django、模板、for 循环和循环

    tl 博士在底部 让我尝试解释一下我想要完成的任务 我有一个二维数组 我想以某种方式显示其内容 我想要 行 并且每行只能显示不超过三个 对象 因为缺乏更好的词 所以我想迭代该数组并在此过程中创建 HTML 我的想法是这样的 数组中的每个 三
  • 如何处理 Django 中的错误

    我想让我的 django 应用程序尽可能对用户友好 并且我想处理适当的错误并让它推出类似于 javascript 中的警报的错误消息 我想在没有上传文件时执行此操作 因此 当按下上传按钮并且尚未上传任何内容时 将会发出一条警报消息 我的看法
  • 如何从 Django 管理界面禁用“最近操作”小部件?

    我不想展示最近的操作小部件在 django 管理站点中 我不知道如何完成此操作 你可以覆盖admin index html禁用显示的模板 有 您可能想要更改 删除的侧边栏块 有条件地启用或禁用操作 ModelAdmin get action
  • 在 ASP.Net Web API 中的日志记录 DelegatingHandler 中读取 HttpRequestMessage.Content 时会丢失

    当尝试控制器中的操作中的对象时 它偶尔似乎为空 我发现这是由于ReadAsStringAsync in the SendAsync 覆盖DelegatingHandler 问题出在内容上 当我的客户端发送内容主体并在记录器中读取它时 控制器
  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • Django 模型:默认日期时间未转换为 SQL CURRENT_TIMESTAMP

    我正在使用 Django 模型创建 PostgreSQL DB 我有一个 DateTimeField 我想将当前时间戳设置为默认值 我知道有多个消息来源建议如何做到这一点 但是 当我在 Django 之外检查数据库时 默认时间戳不会显示 我

随机推荐

  • css & html:隐藏边框的一角[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有以下用户界面 我只想隐藏三种颜色的 div 的一角 它应该看起来像这样 任何人都可以知道如何隐藏 div 边框的角 这是我要求的代
  • 错误 2003 (HY000):无法连接到 AWS RDS 上的 MySQL 服务器

    我创建了一个具有 主机名的外部用户以允许远程访问 将本地 MySQL 连接到远程 AWS RDS 时出现以下错误 错误 2003 HY000 无法连接到 instance cvxqy8tbi2bk us east 1 rds amazona
  • Android XML 解析省略“&”

    问题又是 虽然我在代码中成功实现了 SAX 解析器 但它的行为很奇怪 它只是跳过 之后的条目并转到下一个条目 只是想知道这是否是 SAX 解析器的典型工作方式还是我错误地实现了它 我已经实现了 org xml sax ContentHand
  • 如何使用 HttpWebRequest 获得文件并行

    我正在尝试制作一个像 IDM 这样的程序 它可以同时下载文件的部分内容 我用来实现此目的的工具是 C Net4 5 中的 TPL但是我在使用的时候遇到了问题Tasks使操作并行 序列功能运行良好 并且正在正确下载文件 使用任务的并行函数一直
  • 世博会在生产构建中找不到“主要”应用程序?

    几周前我一直在尝试修复这个错误 但没有成功 问题是我因此无法发布我的应用程序 当我为 iOS 或 Android 中的任何一个构建 expo 应用程序时 Expo CLI 签名过程进展顺利 没有错误并生成最终捆绑包 但是当我将 spa 或
  • 如何找到给定范围内的所有素数?

    def all primes start end list primes for i in range start end for a in range 2 i if i a 0 list primes append i return li
  • 拉取存储库时 X509 解析错误,“负序列号”

    我们的服务器通过代理访问互联网 当我尝试运行诸如之类的拉取命令时 sudo docker run t i ubuntu 14 04 bin bash 我收到以下错误 Get https index docker io v1 reposito
  • IE 100% CPU 挂起/获取堆栈跟踪

    我遇到过 IE7 挂起访问我的网络应用程序的情况 立足于优秀建议 https stackoverflow com questions 574423 ie hanging using 100 of the cpu 574595 574595
  • 如何将 UISegmentedControl 放在 NavigationController 下?

    我想知道让 UISegmentedControl 出现在 navigationController 下方的最佳方法是什么 就像在 AppStore 应用程序中一样 我要放入不同视图中的内容是 UITableView 就像 AppStore
  • 在 NSPredicate 中组合两个条件

    如何将两个条件结合起来NSPredicate 我正在使用以下语句 我想添加另一个条件 使用以下命令将密码与文本字段的内容进行比较AND request predicate NSPredicate format username txtUse
  • argv 可以在运行时更改(不能由应用程序本身更改)

    我想知道可以输入参数main 在运行时更改 换句话说 我们是否应该保护应用程序免受可能的影响TOCTTOU https en wikipedia org wiki Time of check to time of use处理数据时的攻击ar
  • JavaScript 是否通过引用传递? [复制]

    这个问题在这里已经有答案了 JavaScript 是按引用传递还是按值传递 这是一个例子JavaScript 好的部分 https en wikipedia org wiki Douglas Crockford Bibliography 我
  • 从存储过程返回单个值到 .Net 哪个更好:OUTPUT 参数或 ExecuteScalar?

    我需要创建一个需要返回一些记录计数的存储过程 我正在使用 Net 来读取结果 我可以使用OUTPUT参数返回值or我可以做一个select count 在存储过程中并使用SqlCommand ExecuteScalar http msdn
  • 将对象类型的数据帧列转换为浮点型[重复]

    这个问题在这里已经有答案了 我想将我的数据帧的所有非浮点类型列转换为浮点 有什么方法可以做到这一点 如果我能在 One Go 中做到这一点那就太好了 下面是类型 longitude float64 latitude float64 hous
  • Jquery 确认不起作用

    我试过这个 https stackoverflow com a 12617274 4164311 https stackoverflow com a 12617274 4164311 字符串 您确定吗 仅出现在我的浏览器中 当我单击该按钮时
  • 如何在phpmyadmin中导入表?我收到文件大小错误

    我想在 phpmyadmin 中导入数据库 但出现这样的错误 未收到要导入的数据 没有提交文件名 或者文件大小超出了 PHP 配置允许的最大大小 我的文件大小是 4 8 mb 请给我解决方案 按着这些次序 转到 PHP 文件夹 gt 搜索
  • HTTP 基本身份验证和 OAuth 2.0 相同吗?

    供应商 API 文档之一提到他们的 API 调用需要使用 HTTP 基本身份验证方案 即用户 密码 Base64 编码 但是他们的令牌 API 相当于登录 文档提到 此服务实现了 OAuth 2 0 资源所有者密码和凭据授予 HTTP 基本
  • 如何测试一个块是否被屈服?

    我有一个测试需要检查是否正在调用给定方法的块 block lambda some stuff block should receive call get data with timeout 1 block def get data with
  • 禁用 esc 键超时

    Problem I am in insert mode and then I might type a number and then quickly ESC because I stopped typing so it will chan
  • Django Rest Framework:创建对象后禁用字段更新

    我正在尝试通过 Django Rest Framework API 调用使我的用户模型 RESTful 以便我可以创建用户并更新他们的个人资料 但是 当我与用户进行特定的验证过程时 我不希望用户在创建帐户后能够更新用户名 我尝试使用 rea