We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
[Feature Request] Allowed to add more metadata for a project
Feature description
---------
currently we have many annotation projects in doccano.
However,  it is not easy to find the the right project. Because the information for a project is only its name.
- If the user could add more metadata for a project will be good. Such as the created data, created user, description. And all those metadata could be shown in project list page to help the user find the project.
- the metadata for a project could be modified. For example,  we created the project in a bad name such as "DocumentationClassification-1". And we can't change the name.
- some way to search the project or sort the project or filter the project? For example, sort  the project by creation date or only shown the project created by a user.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `backend/projects/serializers.py`
Content:
```
1 from rest_framework import serializers
2 from rest_polymorphic.serializers import PolymorphicSerializer
3 
4 from .models import (
5     BoundingBoxProject,
6     ImageCaptioningProject,
7     ImageClassificationProject,
8     IntentDetectionAndSlotFillingProject,
9     Member,
10     Project,
11     SegmentationProject,
12     Seq2seqProject,
13     SequenceLabelingProject,
14     Speech2textProject,
15     Tag,
16     TextClassificationProject,
17 )
18 
19 
20 class MemberSerializer(serializers.ModelSerializer):
21     username = serializers.SerializerMethodField()
22     rolename = serializers.SerializerMethodField()
23 
24     @classmethod
25     def get_username(cls, instance):
26         user = instance.user
27         return user.username if user else None
28 
29     @classmethod
30     def get_rolename(cls, instance):
31         role = instance.role
32         return role.name if role else None
33 
34     class Meta:
35         model = Member
36         fields = ("id", "user", "role", "username", "rolename")
37 
38 
39 class TagSerializer(serializers.ModelSerializer):
40     class Meta:
41         model = Tag
42         fields = (
43             "id",
44             "project",
45             "text",
46         )
47         read_only_fields = ("id", "project")
48 
49 
50 class ProjectSerializer(serializers.ModelSerializer):
51     tags = TagSerializer(many=True, required=False)
52 
53     class Meta:
54         model = Project
55         fields = [
56             "id",
57             "name",
58             "description",
59             "guideline",
60             "project_type",
61             "updated_at",
62             "random_order",
63             "created_by",
64             "collaborative_annotation",
65             "single_class_classification",
66             "is_text_project",
67             "can_define_label",
68             "can_define_relation",
69             "can_define_category",
70             "can_define_span",
71             "tags",
72         ]
73         read_only_fields = (
74             "updated_at",
75             "is_text_project",
76             "can_define_label",
77             "can_define_relation",
78             "can_define_category",
79             "can_define_span",
80         )
81 
82     def create(self, validated_data):
83         tags = TagSerializer(data=validated_data.pop("tags", []), many=True)
84         project = self.Meta.model.objects.create(**validated_data)
85         tags.is_valid()
86         tags.save(project=project)
87         return project
88 
89     def update(self, instance, validated_data):
90         # Don't update tags. Please use TagAPI.
91         validated_data.pop("tags", None)
92         return super().update(instance, validated_data)
93 
94 
95 class TextClassificationProjectSerializer(ProjectSerializer):
96     class Meta(ProjectSerializer.Meta):
97         model = TextClassificationProject
98 
99 
100 class SequenceLabelingProjectSerializer(ProjectSerializer):
101     class Meta(ProjectSerializer.Meta):
102         model = SequenceLabelingProject
103         fields = ProjectSerializer.Meta.fields + ["allow_overlapping", "grapheme_mode", "use_relation"]
104 
105 
106 class Seq2seqProjectSerializer(ProjectSerializer):
107     class Meta(ProjectSerializer.Meta):
108         model = Seq2seqProject
109 
110 
111 class IntentDetectionAndSlotFillingProjectSerializer(ProjectSerializer):
112     class Meta(ProjectSerializer.Meta):
113         model = IntentDetectionAndSlotFillingProject
114 
115 
116 class Speech2textProjectSerializer(ProjectSerializer):
117     class Meta(ProjectSerializer.Meta):
118         model = Speech2textProject
119 
120 
121 class ImageClassificationProjectSerializer(ProjectSerializer):
122     class Meta(ProjectSerializer.Meta):
123         model = ImageClassificationProject
124 
125 
126 class BoundingBoxProjectSerializer(ProjectSerializer):
127     class Meta(ProjectSerializer.Meta):
128         model = BoundingBoxProject
129 
130 
131 class SegmentationProjectSerializer(ProjectSerializer):
132     class Meta(ProjectSerializer.Meta):
133         model = SegmentationProject
134 
135 
136 class ImageCaptioningProjectSerializer(ProjectSerializer):
137     class Meta(ProjectSerializer.Meta):
138         model = ImageCaptioningProject
139 
140 
141 class ProjectPolymorphicSerializer(PolymorphicSerializer):
142     model_serializer_mapping = {
143         Project: ProjectSerializer,
144         **{cls.Meta.model: cls for cls in ProjectSerializer.__subclasses__()},
145     }
146
```

Path: `backend/projects/views/project.py`
Content:
```
1 from django.conf import settings
2 from django_filters.rest_framework import DjangoFilterBackend
3 from rest_framework import filters, generics, status
4 from rest_framework.permissions import IsAdminUser, IsAuthenticated
5 from rest_framework.response import Response
6 
7 from projects.models import Project
8 from projects.permissions import IsProjectAdmin, IsProjectStaffAndReadOnly
9 from projects.serializers import ProjectPolymorphicSerializer
10 
11 
12 class ProjectList(generics.ListCreateAPIView):
13     serializer_class = ProjectPolymorphicSerializer
14     filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)
15     search_fields = ("name", "description")
16 
17     def get_permissions(self):
18         if self.request.method == "GET":
19             self.permission_classes = [
20                 IsAuthenticated,
21             ]
22         else:
23             self.permission_classes = [IsAuthenticated & IsAdminUser]
24         return super().get_permissions()
25 
26     def get_queryset(self):
27         return Project.objects.filter(role_mappings__user=self.request.user)
28 
29     def perform_create(self, serializer):
30         project = serializer.save(created_by=self.request.user)
31         project.add_admin()
32 
33     def delete(self, request, *args, **kwargs):
34         delete_ids = request.data["ids"]
35         projects = Project.objects.filter(
36             role_mappings__user=self.request.user,
37             role_mappings__role__name=settings.ROLE_PROJECT_ADMIN,
38             pk__in=delete_ids,
39         )
40         # Todo: I want to use bulk delete.
41         # But it causes the constraint error.
42         # See https://github.com/django-polymorphic/django-polymorphic/issues/229
43         for project in projects:
44             project.delete()
45         return Response(status=status.HTTP_204_NO_CONTENT)
46 
47 
48 class ProjectDetail(generics.RetrieveUpdateDestroyAPIView):
49     queryset = Project.objects.all()
50     serializer_class = ProjectPolymorphicSerializer
51     lookup_url_kwarg = "project_id"
52     permission_classes = [IsAuthenticated & (IsProjectAdmin | IsProjectStaffAndReadOnly)]
53
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/backend/projects/serializers.py b/backend/projects/serializers.py
--- a/backend/projects/serializers.py
+++ b/backend/projects/serializers.py
@@ -49,6 +49,13 @@
 
 class ProjectSerializer(serializers.ModelSerializer):
     tags = TagSerializer(many=True, required=False)
+    author = serializers.SerializerMethodField()
+
+    @classmethod
+    def get_author(cls, instance):
+        if instance.created_by:
+            return instance.created_by.username
+        return ""
 
     class Meta:
         model = Project
@@ -58,9 +65,10 @@
             "description",
             "guideline",
             "project_type",
+            "created_at",
             "updated_at",
             "random_order",
-            "created_by",
+            "author",
             "collaborative_annotation",
             "single_class_classification",
             "is_text_project",
@@ -71,7 +79,9 @@
             "tags",
         ]
         read_only_fields = (
+            "created_at",
             "updated_at",
+            "author",
             "is_text_project",
             "can_define_label",
             "can_define_relation",
diff --git a/backend/projects/views/project.py b/backend/projects/views/project.py
--- a/backend/projects/views/project.py
+++ b/backend/projects/views/project.py
@@ -13,6 +13,8 @@
     serializer_class = ProjectPolymorphicSerializer
     filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)
     search_fields = ("name", "description")
+    ordering_fields = ["name", "created_at", "created_by", "project_type"]
+    ordering = ["-created_at"]
 
     def get_permissions(self):
         if self.request.method == "GET":

{"golden_diff": "diff --git a/backend/projects/serializers.py b/backend/projects/serializers.py\n--- a/backend/projects/serializers.py\n+++ b/backend/projects/serializers.py\n@@ -49,6 +49,13 @@\n \n class ProjectSerializer(serializers.ModelSerializer):\n     tags = TagSerializer(many=True, required=False)\n+    author = serializers.SerializerMethodField()\n+\n+    @classmethod\n+    def get_author(cls, instance):\n+        if instance.created_by:\n+            return instance.created_by.username\n+        return \"\"\n \n     class Meta:\n         model = Project\n@@ -58,9 +65,10 @@\n             \"description\",\n             \"guideline\",\n             \"project_type\",\n+            \"created_at\",\n             \"updated_at\",\n             \"random_order\",\n-            \"created_by\",\n+            \"author\",\n             \"collaborative_annotation\",\n             \"single_class_classification\",\n             \"is_text_project\",\n@@ -71,7 +79,9 @@\n             \"tags\",\n         ]\n         read_only_fields = (\n+            \"created_at\",\n             \"updated_at\",\n+            \"author\",\n             \"is_text_project\",\n             \"can_define_label\",\n             \"can_define_relation\",\ndiff --git a/backend/projects/views/project.py b/backend/projects/views/project.py\n--- a/backend/projects/views/project.py\n+++ b/backend/projects/views/project.py\n@@ -13,6 +13,8 @@\n     serializer_class = ProjectPolymorphicSerializer\n     filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)\n     search_fields = (\"name\", \"description\")\n+    ordering_fields = [\"name\", \"created_at\", \"created_by\", \"project_type\"]\n+    ordering = [\"-created_at\"]\n \n     def get_permissions(self):\n         if self.request.method == \"GET\":\n", "issue": "[Feature Request] Allowed to add more metadata for a project\nFeature description\r\n---------\r\ncurrently we have many annotation projects in doccano.\r\nHowever,  it is not easy to find the the right project. Because the information for a project is only its name.\r\n- If the user could add more metadata for a project will be good. Such as the created data, created user, description. And all those metadata could be shown in project list page to help the user find the project.\r\n- the metadata for a project could be modified. For example,  we created the project in a bad name such as \"DocumentationClassification-1\". And we can't change the name.\r\n- some way to search the project or sort the project or filter the project? For example, sort  the project by creation date or only shown the project created by a user.\r\n\n", "before_files": [{"content": "from rest_framework import serializers\nfrom rest_polymorphic.serializers import PolymorphicSerializer\n\nfrom .models import (\n    BoundingBoxProject,\n    ImageCaptioningProject,\n    ImageClassificationProject,\n    IntentDetectionAndSlotFillingProject,\n    Member,\n    Project,\n    SegmentationProject,\n    Seq2seqProject,\n    SequenceLabelingProject,\n    Speech2textProject,\n    Tag,\n    TextClassificationProject,\n)\n\n\nclass MemberSerializer(serializers.ModelSerializer):\n    username = serializers.SerializerMethodField()\n    rolename = serializers.SerializerMethodField()\n\n    @classmethod\n    def get_username(cls, instance):\n        user = instance.user\n        return user.username if user else None\n\n    @classmethod\n    def get_rolename(cls, instance):\n        role = instance.role\n        return role.name if role else None\n\n    class Meta:\n        model = Member\n        fields = (\"id\", \"user\", \"role\", \"username\", \"rolename\")\n\n\nclass TagSerializer(serializers.ModelSerializer):\n    class Meta:\n        model = Tag\n        fields = (\n            \"id\",\n            \"project\",\n            \"text\",\n        )\n        read_only_fields = (\"id\", \"project\")\n\n\nclass ProjectSerializer(serializers.ModelSerializer):\n    tags = TagSerializer(many=True, required=False)\n\n    class Meta:\n        model = Project\n        fields = [\n            \"id\",\n            \"name\",\n            \"description\",\n            \"guideline\",\n            \"project_type\",\n            \"updated_at\",\n            \"random_order\",\n            \"created_by\",\n            \"collaborative_annotation\",\n            \"single_class_classification\",\n            \"is_text_project\",\n            \"can_define_label\",\n            \"can_define_relation\",\n            \"can_define_category\",\n            \"can_define_span\",\n            \"tags\",\n        ]\n        read_only_fields = (\n            \"updated_at\",\n            \"is_text_project\",\n            \"can_define_label\",\n            \"can_define_relation\",\n            \"can_define_category\",\n            \"can_define_span\",\n        )\n\n    def create(self, validated_data):\n        tags = TagSerializer(data=validated_data.pop(\"tags\", []), many=True)\n        project = self.Meta.model.objects.create(**validated_data)\n        tags.is_valid()\n        tags.save(project=project)\n        return project\n\n    def update(self, instance, validated_data):\n        # Don't update tags. Please use TagAPI.\n        validated_data.pop(\"tags\", None)\n        return super().update(instance, validated_data)\n\n\nclass TextClassificationProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = TextClassificationProject\n\n\nclass SequenceLabelingProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = SequenceLabelingProject\n        fields = ProjectSerializer.Meta.fields + [\"allow_overlapping\", \"grapheme_mode\", \"use_relation\"]\n\n\nclass Seq2seqProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = Seq2seqProject\n\n\nclass IntentDetectionAndSlotFillingProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = IntentDetectionAndSlotFillingProject\n\n\nclass Speech2textProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = Speech2textProject\n\n\nclass ImageClassificationProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = ImageClassificationProject\n\n\nclass BoundingBoxProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = BoundingBoxProject\n\n\nclass SegmentationProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = SegmentationProject\n\n\nclass ImageCaptioningProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = ImageCaptioningProject\n\n\nclass ProjectPolymorphicSerializer(PolymorphicSerializer):\n    model_serializer_mapping = {\n        Project: ProjectSerializer,\n        **{cls.Meta.model: cls for cls in ProjectSerializer.__subclasses__()},\n    }\n", "path": "backend/projects/serializers.py"}, {"content": "from django.conf import settings\nfrom django_filters.rest_framework import DjangoFilterBackend\nfrom rest_framework import filters, generics, status\nfrom rest_framework.permissions import IsAdminUser, IsAuthenticated\nfrom rest_framework.response import Response\n\nfrom projects.models import Project\nfrom projects.permissions import IsProjectAdmin, IsProjectStaffAndReadOnly\nfrom projects.serializers import ProjectPolymorphicSerializer\n\n\nclass ProjectList(generics.ListCreateAPIView):\n    serializer_class = ProjectPolymorphicSerializer\n    filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)\n    search_fields = (\"name\", \"description\")\n\n    def get_permissions(self):\n        if self.request.method == \"GET\":\n            self.permission_classes = [\n                IsAuthenticated,\n            ]\n        else:\n            self.permission_classes = [IsAuthenticated & IsAdminUser]\n        return super().get_permissions()\n\n    def get_queryset(self):\n        return Project.objects.filter(role_mappings__user=self.request.user)\n\n    def perform_create(self, serializer):\n        project = serializer.save(created_by=self.request.user)\n        project.add_admin()\n\n    def delete(self, request, *args, **kwargs):\n        delete_ids = request.data[\"ids\"]\n        projects = Project.objects.filter(\n            role_mappings__user=self.request.user,\n            role_mappings__role__name=settings.ROLE_PROJECT_ADMIN,\n            pk__in=delete_ids,\n        )\n        # Todo: I want to use bulk delete.\n        # But it causes the constraint error.\n        # See https://github.com/django-polymorphic/django-polymorphic/issues/229\n        for project in projects:\n            project.delete()\n        return Response(status=status.HTTP_204_NO_CONTENT)\n\n\nclass ProjectDetail(generics.RetrieveUpdateDestroyAPIView):\n    queryset = Project.objects.all()\n    serializer_class = ProjectPolymorphicSerializer\n    lookup_url_kwarg = \"project_id\"\n    permission_classes = [IsAuthenticated & (IsProjectAdmin | IsProjectStaffAndReadOnly)]\n", "path": "backend/projects/views/project.py"}], "after_files": [{"content": "from rest_framework import serializers\nfrom rest_polymorphic.serializers import PolymorphicSerializer\n\nfrom .models import (\n    BoundingBoxProject,\n    ImageCaptioningProject,\n    ImageClassificationProject,\n    IntentDetectionAndSlotFillingProject,\n    Member,\n    Project,\n    SegmentationProject,\n    Seq2seqProject,\n    SequenceLabelingProject,\n    Speech2textProject,\n    Tag,\n    TextClassificationProject,\n)\n\n\nclass MemberSerializer(serializers.ModelSerializer):\n    username = serializers.SerializerMethodField()\n    rolename = serializers.SerializerMethodField()\n\n    @classmethod\n    def get_username(cls, instance):\n        user = instance.user\n        return user.username if user else None\n\n    @classmethod\n    def get_rolename(cls, instance):\n        role = instance.role\n        return role.name if role else None\n\n    class Meta:\n        model = Member\n        fields = (\"id\", \"user\", \"role\", \"username\", \"rolename\")\n\n\nclass TagSerializer(serializers.ModelSerializer):\n    class Meta:\n        model = Tag\n        fields = (\n            \"id\",\n            \"project\",\n            \"text\",\n        )\n        read_only_fields = (\"id\", \"project\")\n\n\nclass ProjectSerializer(serializers.ModelSerializer):\n    tags = TagSerializer(many=True, required=False)\n    author = serializers.SerializerMethodField()\n\n    @classmethod\n    def get_author(cls, instance):\n        if instance.created_by:\n            return instance.created_by.username\n        return \"\"\n\n    class Meta:\n        model = Project\n        fields = [\n            \"id\",\n            \"name\",\n            \"description\",\n            \"guideline\",\n            \"project_type\",\n            \"created_at\",\n            \"updated_at\",\n            \"random_order\",\n            \"author\",\n            \"collaborative_annotation\",\n            \"single_class_classification\",\n            \"is_text_project\",\n            \"can_define_label\",\n            \"can_define_relation\",\n            \"can_define_category\",\n            \"can_define_span\",\n            \"tags\",\n        ]\n        read_only_fields = (\n            \"created_at\",\n            \"updated_at\",\n            \"author\",\n            \"is_text_project\",\n            \"can_define_label\",\n            \"can_define_relation\",\n            \"can_define_category\",\n            \"can_define_span\",\n        )\n\n    def create(self, validated_data):\n        tags = TagSerializer(data=validated_data.pop(\"tags\", []), many=True)\n        project = self.Meta.model.objects.create(**validated_data)\n        tags.is_valid()\n        tags.save(project=project)\n        return project\n\n    def update(self, instance, validated_data):\n        # Don't update tags. Please use TagAPI.\n        validated_data.pop(\"tags\", None)\n        return super().update(instance, validated_data)\n\n\nclass TextClassificationProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = TextClassificationProject\n\n\nclass SequenceLabelingProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = SequenceLabelingProject\n        fields = ProjectSerializer.Meta.fields + [\"allow_overlapping\", \"grapheme_mode\", \"use_relation\"]\n\n\nclass Seq2seqProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = Seq2seqProject\n\n\nclass IntentDetectionAndSlotFillingProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = IntentDetectionAndSlotFillingProject\n\n\nclass Speech2textProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = Speech2textProject\n\n\nclass ImageClassificationProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = ImageClassificationProject\n\n\nclass BoundingBoxProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = BoundingBoxProject\n\n\nclass SegmentationProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = SegmentationProject\n\n\nclass ImageCaptioningProjectSerializer(ProjectSerializer):\n    class Meta(ProjectSerializer.Meta):\n        model = ImageCaptioningProject\n\n\nclass ProjectPolymorphicSerializer(PolymorphicSerializer):\n    model_serializer_mapping = {\n        Project: ProjectSerializer,\n        **{cls.Meta.model: cls for cls in ProjectSerializer.__subclasses__()},\n    }\n", "path": "backend/projects/serializers.py"}, {"content": "from django.conf import settings\nfrom django_filters.rest_framework import DjangoFilterBackend\nfrom rest_framework import filters, generics, status\nfrom rest_framework.permissions import IsAdminUser, IsAuthenticated\nfrom rest_framework.response import Response\n\nfrom projects.models import Project\nfrom projects.permissions import IsProjectAdmin, IsProjectStaffAndReadOnly\nfrom projects.serializers import ProjectPolymorphicSerializer\n\n\nclass ProjectList(generics.ListCreateAPIView):\n    serializer_class = ProjectPolymorphicSerializer\n    filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)\n    search_fields = (\"name\", \"description\")\n    ordering_fields = [\"name\", \"created_at\", \"created_by\", \"project_type\"]\n    ordering = [\"-created_at\"]\n\n    def get_permissions(self):\n        if self.request.method == \"GET\":\n            self.permission_classes = [\n                IsAuthenticated,\n            ]\n        else:\n            self.permission_classes = [IsAuthenticated & IsAdminUser]\n        return super().get_permissions()\n\n    def get_queryset(self):\n        return Project.objects.filter(role_mappings__user=self.request.user)\n\n    def perform_create(self, serializer):\n        project = serializer.save(created_by=self.request.user)\n        project.add_admin()\n\n    def delete(self, request, *args, **kwargs):\n        delete_ids = request.data[\"ids\"]\n        projects = Project.objects.filter(\n            role_mappings__user=self.request.user,\n            role_mappings__role__name=settings.ROLE_PROJECT_ADMIN,\n            pk__in=delete_ids,\n        )\n        # Todo: I want to use bulk delete.\n        # But it causes the constraint error.\n        # See https://github.com/django-polymorphic/django-polymorphic/issues/229\n        for project in projects:\n            project.delete()\n        return Response(status=status.HTTP_204_NO_CONTENT)\n\n\nclass ProjectDetail(generics.RetrieveUpdateDestroyAPIView):\n    queryset = Project.objects.all()\n    serializer_class = ProjectPolymorphicSerializer\n    lookup_url_kwarg = \"project_id\"\n    permission_classes = [IsAuthenticated & (IsProjectAdmin | IsProjectStaffAndReadOnly)]\n", "path": "backend/projects/views/project.py"}]}