django - 不能同时设置 `read_only` 和 `write_only`
问题描述
在我的项目中,我想将密码设置为read_only
(因为我有一个单独的端点来重置密码)和write_only
(因为我不希望在响应中发送密码)。
这是我的序列化程序:
class UserSerializer(serializers.ModelSerializer):
"""A Serizlier class for User """
class Meta:
model = models.User
fields = ('id', 'email', 'phone_number', 'user_type', 'password')
extra_kwargs = { 'password': { 'write_only': True} }
read_only_fields = ('password',)
但我收到一条错误消息:
/api/user/21/ 处的 AssertionError
不能同时设置
read_only
和write_only
我怎样才能有一个字段既read_only
和write_only
?
解决方案
将序列化程序的方法覆盖__init__()
为,
class UserSerializer(serializers.ModelSerializer):
"""A Serizlier class for User """
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.context['some_flag']:
self.fields['password'].read_only = True
else:
self.fields['password'].write_only = True
class Meta:
model = models.User
fields = ('id', 'email', 'phone_number', 'user_type', 'password')
# extra_kwargs = { 'password': { 'write_only': True} } # remove this
# read_only_fields = ('password',) # remove this
该some_flag
变量是您应该从密码重置视图或其他视图传递给序列化程序的东西
推荐阅读
- python - 将以下 json 转换为 csv
- wifi - ESP32 服务器看不到客户端
- angularjs - 有没有办法跟踪/跟踪 WebStorm 中运行的函数流?
- python - SFTP:从远程服务器递归复制/下载文件夹中的所有文件
- react-native - FlatList 和页面滚动问题,如何解决?
- gdal - 如何在 Django settings.py 中指定 GDAL_LIBRARY_PATH?
- c# - 我们可以使用 IEqualityComparer 接口使用 LINQ 扩展方法 SequenceEqual 逐字段比较两个复杂集合吗
- android - Android AWS TransferService 在 API 级别 26 及更高版本中不起作用
- java - 为什么输出在下面的java代码中?
- mysql - 如何找到曾经相同但现在已损坏的两张表之间的差异