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