【发布时间】:2019-02-06 10:14:27
【问题描述】:
我正在创建 UserSerializer 并希望允许用户创建新帐户但禁止他们更改用户名。我可以应用 read_only 属性,但用户在创建新用户名时将无法设置用户名。但没有它它允许我改变它。还有一个required 属性,遗憾的是它不能与 read_only 一起使用。没有其他相关属性。
一种解决方案是创建 2 个不同的序列化器,一个用于创建用户,另一个用于更改他,但这似乎是丑陋和错误的做法。您对如何在不编写 2 个序列化程序的情况下实现这一点有什么建议吗?
感谢您的建议。
PS:我用的是python3.6和django2.1
编辑:我正在使用generics.{ListCreateAPIView|RetrieveUpdateDestroyAPIView} 类进行视图。像这样:
class UserList(generics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
class UserDetails(generics.RetrieveUpdateAPIView):
# this magic means (read only request OR accessing user is the same user being edited OR user is admin)
permission_classes = (perm_or(ReadOnly, perm_or(IsUserOwner, IsAdmin)),)
queryset = User.objects.all()
serializer_class = UserSerializer
EDIT2:有一个重复的问题(可能我的问题是重复的)here
【问题讨论】:
-
你在使用 ModelViewset 类吗?
-
最好的方法是在模型中实现逻辑。当你保存一个实例时,检查它是否设置了 pk。如果是,它正在更新,如果不是,它正在创建。如果它正在更新,则不允许更改用户名的值。
-
是的,以前没找到,但我认为 JPG 的答案比其他问题中的所有答案都好
标签: python django python-3.x rest django-rest-framework