python-3.x - How to patch a certain user object?
问题描述
so im trying to make a url like some_site/me/, that shows my profile and the patch for some reason doesnt work heres a view:
class MyUserViewSet(viewsets.ModelViewSet):
pagination_class = None
permission_classes = [permissions.IsAuthenticated]
serializer_class = UserSerializer
def get_queryset(self):
return User.objects.filter(username=self.request.user.username)
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
serializer = self.get_serializer(queryset[0])
return Response(serializer.data)
def partial_update(self, request, *args, **kwargs):
queryset = self.list()
serializer = UserSerializer(queryset, data=request.data, partial=True)
serializer.is_valid(raise_exception=True)
serializer.save()
a serializer:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = 'first_name', 'last_name', 'username', 'bio', 'email', 'role'
lookup_field = 'username'
a model if needed
class User(AbstractUser):
USER_ROLE = (
('user', 'user'),
('moderator', 'moderator'),
('admin', 'admin'),
)
role = models.CharField(max_length=9, choices=USER_ROLE, default='user')
email = models.EmailField('email address', unique=True)
bio = models.TextField(max_length=300, blank=True, null=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['role',]
my guess is smths up with the retrieve thing
解决方案
问题在def list(...)
. 它返回一个响应(一个 HTTP 响应)而不是一个对象。
class MyUserViewSet(viewsets.ModelViewSet):
pagination_class = None
permission_classes = [permissions.IsAuthenticated]
serializer_class = UserSerializer
def get_queryset(self):
return User.objects.filter(username=self.request.user.username)
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
serializer = self.get_serializer(queryset[0])
return Response(serializer.data)
def partial_update(self, request, *args, **kwargs):
user = User.objects.filter(username=self.request.user.username)
# update the user obj as per data received in request.data
# don't forget to call user.save()
# return Nothing or None
推荐阅读
- nodes - 如何在 grafana 仪表板中创建一个下拉列表,显示所有可用节点和 zabbix 作为数据源
- react-native - 如何解决 react-native 中的“无法在模块外使用 import 语句”错误
- python - 使用 keras 的“负尺寸”
- angular - 如何获取类型
其中 T 是匿名类? - python - scipy.interpolate.interp1d 中的错误插值
- c# - 为什么此碰撞代码在统一移动 2D 中不起作用
- firebase - FCM 通知未进行
- verilog - 为什么阻塞和非阻塞分配在测试台中的行为不同?
- r - 用 facet_grid 画线
- python - Python:以 10 为底的 int() 错误无效文字