【问题标题】:Django won’t let me query a table by any attribute bar ‘pk’Django 不允许我通过任何属性栏“pk”查询表
【发布时间】:2020-12-30 12:55:51
【问题描述】:

所以我试图通过关系属性“所有者”查询我的“个人资料”表,该属性链接到另一个表“用户”。但是,当我尝试通过此属性进行查询时,出现以下错误: 'AssertionError:预期视图 UserProfile 将使用名为“pk”的 URL 关键字参数调用。修复您的 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)

Views.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()),
]

为什么会出现此错误,我该如何解决?任何帮助将不胜感激。

谢谢,格雷。

【问题讨论】:

    标签: python django api django-rest-framework drf-queryset


    【解决方案1】:

    在您的视图中将 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()

    【讨论】:

      猜你喜欢
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2020-01-04
      • 1970-01-01
      • 2021-07-30
      • 2021-09-10
      相关资源
      最近更新 更多