【问题标题】:Create URL for detailview using DRF Modelviewset使用 DRF Modelviewset 创建详细视图的 URL
【发布时间】:2022-01-14 20:49:50
【问题描述】:

我正在使用 DRF modelviewset 为用户模型创建 api。谁能解释或帮助我如何在 react-native 中为用户的detailview 传递一个 url。现在我正在以这种方式获取详细信息127.0.0.1:8000/users/users/2/。但每次我不想在 url 中传递 id。

models.py

class User(AbstractUser):
    """This Class is used to extend the in-build user model """
    ROLE_CHOICES = (('CREATOR','CREATOR'),('MODERATOR','MODERATOR'),('USERS','USERS'))
    GENDER_CHOICES = (('MALE','MALE'),('FEMALE',"FEMALE"),('OTHER','OTHER'))
    date_of_birth = models.DateField(verbose_name='Date of Birth', null=True)
    profile_image = models.ImageField(upload_to='media/profile_images', verbose_name='Profile Image', default='media/profile_images/default.webp', blank=True)
    bio = models.TextField(verbose_name='Bio')
    role = models.CharField(max_length=10, verbose_name='Role', choices=ROLE_CHOICES, default='USERS')
    gender = models.CharField(max_length=6, verbose_name='Gender', choices=GENDER_CHOICES)

serializers.py

class UserSerializer(serializers.ModelSerializer):
    following = serializers.SerializerMethodField(read_only=True)
    followers = serializers.SerializerMethodField(read_only=True)

    class Meta:
        model = User
        fields = ('first_name','last_name','username','password','email','date_of_birth',
                  'profile_image','bio','role','gender', 'following','followers')
        extra_kwargs = {'is_active':{'write_only':True},
                        'password':{'write_only':True}}

    def create(self, validated_data):
        logger.info('Information Stored!')
        return User.objects.create_user(**validated_data)

    def update(self, *args, **kwargs):
        user = super().update( *args, **kwargs)
        p = user.password
        user.set_password(p)
        user.save()
        return user

views.py

class UserAPI(viewsets.ModelViewSet):
    serializer_class = UserSerializer
    # permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]

    def get_queryset(self):
        users = User.objects.all()
        return users

urls.py

router = DefaultRouter()
router.register('users', views.UserAPI, basename='users'),
router.register('following', views.FollowingAPI, basename='following'),


urlpatterns = router.urls

我该如何解决这个问题。需要你的帮助。谢谢

【问题讨论】:

  • 您想获取当前认证用户的详细信息吗?
  • 是的@Sumithran。已注册并希望查看其整个个人资料的用户。

标签: django django-models django-rest-framework django-views django-serializer


【解决方案1】:

你可以使用action装饰器

试试这个

class UserAPI(viewsets.ModelViewSet):
   ...

    @action(detail=False)
    def profile(self, request):
        serializer = UserSerializer(request.user)
        return Response(serializer.data)

现在转到127.0.0.1:8000/users/profile/,您应该会看到当前经过身份验证的用户的数据。

【讨论】:

  • 不,它不工作。 AttributeError at /users/profile/.
  • 你能分享完整的错误回溯吗?
  • 你能分享完整的错误回溯吗?
  • 确定你已经登录了吗?
  • 您能告诉我如何通过可浏览的 api 登录吗?请
【解决方案2】:

这可能会有所帮助。 可以使用user = request.user.id,这样就可以获取当前登录用户。

【讨论】:

  • 你能用代码解释一下吗?因为我是这些中的新手
  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2018-12-17
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 2014-09-15
相关资源
最近更新 更多