如何在 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