如何在 Django 中将 url 路径更改为名称而不是 ID
How to change url path to name in django instead of id
抱歉,如果我问的是一个非常简单的问题,我才刚刚开始学习 WebDev,我有一个关于 django url 的问题,我使用了 rest 框架。我有 http://localhost:8000/api/projectList/1 并且我想将 id 更改为 url 中的名称,例如 http://localhost:8000/api/projectList/project
这是代码:
model.py
class ProjectList(models.Model):
project = models.CharField(max_length=200)
project_name = models.CharField(max_length=200)
category = models.CharField(max_length=200)
academic = models.CharField(max_length=200)
view.py
class ProjectListSerializer(serializers.ModelSerializer):
class Meta :
model = ProjectList
fields = '__all__'
class ProjectListViewset(viewsets.ModelViewSet):
queryset = ProjectList.objects.all()
serializers_class = ProjectListSerializer
class ProjectListListView(generics.ListAPIView):
serializer_class = ProjectListSerializer
def get_queryset(self):
return ProjectList.objects.all()
class ProjectId(generics.RetrieveUpdateDestroyAPIView):
queryset = ProjectList.objects.all()
serializer_class = ProjectListSerializer
urls.py
urlpatterns = [
path("", include(router.urls)),
path("projectList/", ProjectListListView.as_view()),
path("projectList/<int:pk>", ProjectId.as_view()),
]
谢谢,抱歉我的简单问题和我糟糕的英语。
在视图和序列化器中定义 lookup_field = project,这将覆盖默认的 id 字段。
Ps - 确保项目是唯一的并且是主键。
同时更改您的 url 以接受字符串而不是 int(id)
Django Rest Framework ModelViewset 不需要为细节声明单独的视图。在 ProjectListListView 中声明
lookup_field = 'project'
并删除
path("projectList/<int:pk>", ProjectId.as_view()),
来自 urlpatterns
抱歉,如果我问的是一个非常简单的问题,我才刚刚开始学习 WebDev,我有一个关于 django url 的问题,我使用了 rest 框架。我有 http://localhost:8000/api/projectList/1 并且我想将 id 更改为 url 中的名称,例如 http://localhost:8000/api/projectList/project 这是代码:
model.py
class ProjectList(models.Model):
project = models.CharField(max_length=200)
project_name = models.CharField(max_length=200)
category = models.CharField(max_length=200)
academic = models.CharField(max_length=200)
view.py
class ProjectListSerializer(serializers.ModelSerializer):
class Meta :
model = ProjectList
fields = '__all__'
class ProjectListViewset(viewsets.ModelViewSet):
queryset = ProjectList.objects.all()
serializers_class = ProjectListSerializer
class ProjectListListView(generics.ListAPIView):
serializer_class = ProjectListSerializer
def get_queryset(self):
return ProjectList.objects.all()
class ProjectId(generics.RetrieveUpdateDestroyAPIView):
queryset = ProjectList.objects.all()
serializer_class = ProjectListSerializer
urls.py
urlpatterns = [
path("", include(router.urls)),
path("projectList/", ProjectListListView.as_view()),
path("projectList/<int:pk>", ProjectId.as_view()),
]
谢谢,抱歉我的简单问题和我糟糕的英语。
在视图和序列化器中定义 lookup_field = project,这将覆盖默认的 id 字段。
Ps - 确保项目是唯一的并且是主键。
同时更改您的 url 以接受字符串而不是 int(id)
Django Rest Framework ModelViewset 不需要为细节声明单独的视图。在 ProjectListListView 中声明
lookup_field = 'project'
并删除
path("projectList/<int:pk>", ProjectId.as_view()),
来自 urlpatterns