Django REST - 如何正确配置 URL 查找字段?

Posted

技术标签:

【中文标题】Django REST - 如何正确配置 URL 查找字段?【英文标题】:Django REST - How do I correctly configure URLs lookup_field? 【发布时间】:2021-05-30 03:51:57 【问题描述】:

我已经做了几个 django 项目,现在正在试验其余的框架。我正在尝试配置我的网址,以便 url /testuser/ 将带您到用户名“testuser”的用户的个人资料页面。非常简单的任务,我可以使用slug_field 在常规 django 中管理,但我想我不太了解如何正确配置 REST url。任何帮助表示赞赏。代码如下。

仅供参考,如下所示,我使用的是CustomUser 模型,通过OneToOneField 链接到Profile 模型。用户名存储在CustomUser 模型中。但是,个人资料页面将使用ProfileSerializer 填充。

我认为问题可能是我从相关模型 CustomUser 访问“用户名”的方式 - 但我可能是错的(可能,哈哈)。有人知道吗?

我当前的代码抛出错误:

Expected view ProfileView to be called with a URL keyword argument named "username". Fix your URL conf, or set the .lookup_field attribute on the view correctly.

users.models

class CustomUser(AbstractBaseUser):
    username = models.CharField(
        verbose_name='username',
        max_length=40,
        unique=True,
    )
    ...

profiles.models

class Profile(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='profile'
    )
    ...

profiles.serializers

class ProfileSerializer(serializers.ModelSerializer):
    username = serializers.CharField(read_only=True, source="user.username")

    class Meta:
        fields = ('username', 'display_name', 'profile_pic',
                  'bio', 'following', 'modified', 'est', )
        model = Profile
        lookup_field = 'username'

profiles.views

class ProfileView(generics.RetrieveUpdateAPIView):
    queryset = Profile.objects.all()
    serializer_class = ProfileSerializer
    lookup_field = 'username'

profiles.urls

urlpatterns = [
    path('<str:slug>/', PostDetail.as_view(), name='self_profile'),
]

感谢您的帮助。

【问题讨论】:

【参考方案1】:

您的视图需要username URL 参数,但它接收slug。您可以更改您的 URL 以传递 username 而不是 slug,或者在您的视图上将 lookup_url_kwarg 设置为 slug 以解决这种情况。

【讨论】:

现在看起来很简单...谢谢。我一直在 url 中使用“slug”字段,所以我想我认为它是标准的,并且“lookup_field”将该值转换为 slug。傻 - 但现在都在工作。谢谢

以上是关于Django REST - 如何正确配置 URL 查找字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地将参数传递给基于类的视图测试 Django Rest Framework?

Django Rest Framework:从 URL 参数动态设置数据库

无论数据源如何,使用 Django/Django Rest Framework 验证和保存数据的正确过程是啥?

如何在 django rest 框架中对项目的删除 url 进行 url-reverse

带有 Django 2.0 的 Django REST 框架 URL

如何将命名空间 url 添加到 django-rest-framework 路由器视图集