python - Django Rest Framework - 显示用户的个人资料
问题描述
我的users/models.py文件如下所示。
class User(AbstractUser):
is_customer = models.BooleanField(default=False)
is_courier = models.BooleanField(default=False)
is_merchant = models.BooleanField(default=False)
class Profile(models.Model):
contact_number = models.CharField(max_length=10, unique=True)
rating = models.IntegerField(blank=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
我当前的users/serializers.py如下所示。
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = '__all__'
我的users/api.py如下所示。
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
permission_classes = [
permissions.AllowAny
]
serializer_class = UserSerializer
我的users/urls.py有以下内容:
router.register('api/users', UserViewSet, 'users')
我当前的设置适用于 UserViewSet。http://127.0.0.1:8000/api/users/显示所有用户, http: //127.0.0.1 :8000/api/users/1/根据ID显示用户。
我的问题是,当我转到以下 URL http://127.0.0.1:8000/api/users/1/profile时,如何加载用户配置文件
任何帮助深表感谢。先感谢您。
解决方案
Profile
为模型创建一个新的序列化程序
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = "__all__"
然后为Profile
.
from rest_framework.views import APIView
from rest_framework.response import Response
from django.shortcuts import get_object_or_404
class ProfileAPI(APIView):
def get(self, request, *args, **kwargs):
user = get_object_or_404(User, pk=kwargs['user_id'])
profile_serializer = ProfileSerializer(user.profile)
return Response(profile_serializer.data)
然后,将视图连接到urls.py
urlpatterns = [
# your other url configs
path('api/users/<user_id>/profile/', ProfileAPI.as_view())
]
更新 1
使用ViewSet
类实现
from rest_framework import viewsets
from rest_framework.response import Response
from django.shortcuts import get_object_or_404
class ProfileAPI(viewsets.ViewSet):
def get(self, request, *args, **kwargs):
user = get_object_or_404(User, pk=kwargs['user_id'])
profile_serializer = ProfileSerializer(user.profile)
return Response(profile_serializer.data)
更新 2
from rest_framework import viewsets
class ProfileAPI(viewsets.ModelViewSet):
serializer_class = ProfileSerializer
def get_queryset(self):
return Profile.objects.filter(user=self.kwargs['user_id'])
并在您urls.py
将视图集注册为
router.register('api/users/(?P<user_id>\d+)/profile', ProfileAPI, base_name='profile_api')
推荐阅读
- webpack - 部署 Vue 应用程序时生产 webpack 网络服务器的缺点
- c# - RS-232 无法在 Windows 10 物联网上运行
- c# - 从具有索引的数组中获取前 3 个最高值
- google-apps-script - Google脚本中的“委派被拒绝”
- c# - 两个协变接口的 C# 协方差问题
- 3d - 如何创建 USDZ 文件?
- nlp - 如何合并 2 个 LUIS 模型?
- python - 在 Antlr4 中解析字符串中的令牌
- facebook - 如何使用应用访问令牌获取 Facebook 应用的所有者电子邮件
- web-services - 启动wildfly时出现org.jboss.weld.exceptions.DefinitionException