0

所以我试图通过关系属性“所有者”查询我的“个人资料”表,该属性链接到另一个表“用户”。但是,当我尝试通过此属性进行查询时,我收到以下错误:'AssertionError: Expected view UserProfile to be called with a URL关键字参数名为“pk”。修复您的 URL 配置,或正确设置视图上的 .lookup_field 属性。

查询我使用的表: Profile.objects.filter(owner__username = username)

模型.py:

class User(models.Model):
    username = CharField(max_length = 80)

class Profile(models.Model):
    owner = models.OneToOneField('User', 
related_name = 'profile', on_delete = models.CASCADE)

视图.py:

class UserProfile(generics.GenericAPIView, 
mixins.RetrieveModelMixin):
    def get_queryset(self):
        username = self.kwargs['username']
        return Profile.objects.filter(owner__username=username)
    serializer_class = UserProfileSerializer
    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

网址.py:

urlpatterns = [
    path('user/<str:username>/profile/', views.UserProfile.as_view()),
]

为什么我会收到此错误,我该如何解决?任何帮助将非常感激。

谢谢,格雷。

4

1 回答 1

2

在您的视图中设置lookup_fieldlookup_url_kwarg属性为,

from rest_framework import generics


class UserProfile(generics.RetrieveAPIView):
    lookup_field = 'owner__username'
    lookup_url_kwarg = 'username'
    serializer_class = UserProfileSerializer
    queryset = Profile.objects.all()
于 2020-09-12T04:44:02.810 回答