We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Archive Serializers use `id` rather than `pk`
Some of our serializers use `id` rather than `pk`, for consistency we should only use one and that should be `pk`. Check the other serializers and see if this occurs elsewhere.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `app/grandchallenge/archives/serializers.py`
Content:
```
1 from django.db.transaction import on_commit
2 from guardian.shortcuts import get_objects_for_user
3 from rest_framework import serializers
4 from rest_framework.fields import ReadOnlyField, URLField
5 from rest_framework.relations import HyperlinkedRelatedField
6 
7 from grandchallenge.archives.models import Archive, ArchiveItem
8 from grandchallenge.archives.tasks import (
9     start_archive_item_update_tasks,
10     update_archive_item_update_kwargs,
11 )
12 from grandchallenge.components.serializers import (
13     ComponentInterfaceValuePostSerializer,
14     ComponentInterfaceValueSerializer,
15 )
16 from grandchallenge.hanging_protocols.serializers import (
17     HangingProtocolSerializer,
18 )
19 
20 
21 class ArchiveItemSerializer(serializers.ModelSerializer):
22     archive = HyperlinkedRelatedField(
23         read_only=True, view_name="api:archive-detail"
24     )
25     values = ComponentInterfaceValueSerializer(many=True)
26 
27     class Meta:
28         model = ArchiveItem
29         fields = ("id", "archive", "values")
30 
31 
32 class ArchiveSerializer(serializers.ModelSerializer):
33     algorithms = HyperlinkedRelatedField(
34         read_only=True, many=True, view_name="api:algorithm-detail"
35     )
36     logo = URLField(source="logo.x20.url", read_only=True)
37     url = URLField(source="get_absolute_url", read_only=True)
38     # Include the read only name for legacy clients
39     name = ReadOnlyField()
40     hanging_protocol = HangingProtocolSerializer()
41 
42     class Meta:
43         model = Archive
44         fields = (
45             "id",
46             "name",
47             "title",
48             "algorithms",
49             "logo",
50             "description",
51             "api_url",
52             "url",
53             "hanging_protocol",
54             "view_content",
55         )
56 
57 
58 class ArchiveItemPostSerializer(ArchiveItemSerializer):
59     archive = HyperlinkedRelatedField(
60         queryset=Archive.objects.none(),
61         view_name="api:archive-detail",
62         write_only=True,
63     )
64 
65     def __init__(self, *args, **kwargs):
66         super().__init__(*args, **kwargs)
67         self.fields["values"] = ComponentInterfaceValuePostSerializer(
68             many=True, context=self.context
69         )
70 
71         if "request" in self.context:
72             user = self.context["request"].user
73 
74             self.fields["archive"].queryset = get_objects_for_user(
75                 user, "archives.use_archive", accept_global_perms=False
76             )
77 
78     def update(self, instance, validated_data):
79         civs = validated_data.pop("values")
80 
81         civ_pks_to_remove = set()
82         civ_pks_to_add = set()
83         upload_pks = {}
84 
85         for civ in civs:
86             interface = civ.pop("interface", None)
87             upload_session = civ.pop("upload_session", None)
88             value = civ.pop("value", None)
89             image = civ.pop("image", None)
90             user_upload = civ.pop("user_upload", None)
91 
92             update_archive_item_update_kwargs(
93                 instance=instance,
94                 interface=interface,
95                 value=value,
96                 image=image,
97                 user_upload=user_upload,
98                 upload_session=upload_session,
99                 civ_pks_to_add=civ_pks_to_add,
100                 civ_pks_to_remove=civ_pks_to_remove,
101                 upload_pks=upload_pks,
102             )
103 
104         on_commit(
105             start_archive_item_update_tasks.signature(
106                 kwargs={
107                     "archive_item_pk": instance.pk,
108                     "civ_pks_to_add": list(civ_pks_to_add),
109                     "civ_pks_to_remove": list(civ_pks_to_remove),
110                     "upload_pks": upload_pks,
111                 }
112             ).apply_async
113         )
114 
115         return instance
116
```
--- 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/app/grandchallenge/archives/serializers.py b/app/grandchallenge/archives/serializers.py
--- a/app/grandchallenge/archives/serializers.py
+++ b/app/grandchallenge/archives/serializers.py
@@ -11,7 +11,7 @@
 )
 from grandchallenge.components.serializers import (
     ComponentInterfaceValuePostSerializer,
-    ComponentInterfaceValueSerializer,
+    HyperlinkedComponentInterfaceValueSerializer,
 )
 from grandchallenge.hanging_protocols.serializers import (
     HangingProtocolSerializer,
@@ -22,11 +22,11 @@
     archive = HyperlinkedRelatedField(
         read_only=True, view_name="api:archive-detail"
     )
-    values = ComponentInterfaceValueSerializer(many=True)
+    values = HyperlinkedComponentInterfaceValueSerializer(many=True)
 
     class Meta:
         model = ArchiveItem
-        fields = ("id", "archive", "values")
+        fields = ("pk", "archive", "values")
 
 
 class ArchiveSerializer(serializers.ModelSerializer):
@@ -42,7 +42,7 @@
     class Meta:
         model = Archive
         fields = (
-            "id",
+            "pk",
             "name",
             "title",
             "algorithms",

{"golden_diff": "diff --git a/app/grandchallenge/archives/serializers.py b/app/grandchallenge/archives/serializers.py\n--- a/app/grandchallenge/archives/serializers.py\n+++ b/app/grandchallenge/archives/serializers.py\n@@ -11,7 +11,7 @@\n )\n from grandchallenge.components.serializers import (\n     ComponentInterfaceValuePostSerializer,\n-    ComponentInterfaceValueSerializer,\n+    HyperlinkedComponentInterfaceValueSerializer,\n )\n from grandchallenge.hanging_protocols.serializers import (\n     HangingProtocolSerializer,\n@@ -22,11 +22,11 @@\n     archive = HyperlinkedRelatedField(\n         read_only=True, view_name=\"api:archive-detail\"\n     )\n-    values = ComponentInterfaceValueSerializer(many=True)\n+    values = HyperlinkedComponentInterfaceValueSerializer(many=True)\n \n     class Meta:\n         model = ArchiveItem\n-        fields = (\"id\", \"archive\", \"values\")\n+        fields = (\"pk\", \"archive\", \"values\")\n \n \n class ArchiveSerializer(serializers.ModelSerializer):\n@@ -42,7 +42,7 @@\n     class Meta:\n         model = Archive\n         fields = (\n-            \"id\",\n+            \"pk\",\n             \"name\",\n             \"title\",\n             \"algorithms\",\n", "issue": "Archive Serializers use `id` rather than `pk`\nSome of our serializers use `id` rather than `pk`, for consistency we should only use one and that should be `pk`. Check the other serializers and see if this occurs elsewhere.\n", "before_files": [{"content": "from django.db.transaction import on_commit\nfrom guardian.shortcuts import get_objects_for_user\nfrom rest_framework import serializers\nfrom rest_framework.fields import ReadOnlyField, URLField\nfrom rest_framework.relations import HyperlinkedRelatedField\n\nfrom grandchallenge.archives.models import Archive, ArchiveItem\nfrom grandchallenge.archives.tasks import (\n    start_archive_item_update_tasks,\n    update_archive_item_update_kwargs,\n)\nfrom grandchallenge.components.serializers import (\n    ComponentInterfaceValuePostSerializer,\n    ComponentInterfaceValueSerializer,\n)\nfrom grandchallenge.hanging_protocols.serializers import (\n    HangingProtocolSerializer,\n)\n\n\nclass ArchiveItemSerializer(serializers.ModelSerializer):\n    archive = HyperlinkedRelatedField(\n        read_only=True, view_name=\"api:archive-detail\"\n    )\n    values = ComponentInterfaceValueSerializer(many=True)\n\n    class Meta:\n        model = ArchiveItem\n        fields = (\"id\", \"archive\", \"values\")\n\n\nclass ArchiveSerializer(serializers.ModelSerializer):\n    algorithms = HyperlinkedRelatedField(\n        read_only=True, many=True, view_name=\"api:algorithm-detail\"\n    )\n    logo = URLField(source=\"logo.x20.url\", read_only=True)\n    url = URLField(source=\"get_absolute_url\", read_only=True)\n    # Include the read only name for legacy clients\n    name = ReadOnlyField()\n    hanging_protocol = HangingProtocolSerializer()\n\n    class Meta:\n        model = Archive\n        fields = (\n            \"id\",\n            \"name\",\n            \"title\",\n            \"algorithms\",\n            \"logo\",\n            \"description\",\n            \"api_url\",\n            \"url\",\n            \"hanging_protocol\",\n            \"view_content\",\n        )\n\n\nclass ArchiveItemPostSerializer(ArchiveItemSerializer):\n    archive = HyperlinkedRelatedField(\n        queryset=Archive.objects.none(),\n        view_name=\"api:archive-detail\",\n        write_only=True,\n    )\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.fields[\"values\"] = ComponentInterfaceValuePostSerializer(\n            many=True, context=self.context\n        )\n\n        if \"request\" in self.context:\n            user = self.context[\"request\"].user\n\n            self.fields[\"archive\"].queryset = get_objects_for_user(\n                user, \"archives.use_archive\", accept_global_perms=False\n            )\n\n    def update(self, instance, validated_data):\n        civs = validated_data.pop(\"values\")\n\n        civ_pks_to_remove = set()\n        civ_pks_to_add = set()\n        upload_pks = {}\n\n        for civ in civs:\n            interface = civ.pop(\"interface\", None)\n            upload_session = civ.pop(\"upload_session\", None)\n            value = civ.pop(\"value\", None)\n            image = civ.pop(\"image\", None)\n            user_upload = civ.pop(\"user_upload\", None)\n\n            update_archive_item_update_kwargs(\n                instance=instance,\n                interface=interface,\n                value=value,\n                image=image,\n                user_upload=user_upload,\n                upload_session=upload_session,\n                civ_pks_to_add=civ_pks_to_add,\n                civ_pks_to_remove=civ_pks_to_remove,\n                upload_pks=upload_pks,\n            )\n\n        on_commit(\n            start_archive_item_update_tasks.signature(\n                kwargs={\n                    \"archive_item_pk\": instance.pk,\n                    \"civ_pks_to_add\": list(civ_pks_to_add),\n                    \"civ_pks_to_remove\": list(civ_pks_to_remove),\n                    \"upload_pks\": upload_pks,\n                }\n            ).apply_async\n        )\n\n        return instance\n", "path": "app/grandchallenge/archives/serializers.py"}], "after_files": [{"content": "from django.db.transaction import on_commit\nfrom guardian.shortcuts import get_objects_for_user\nfrom rest_framework import serializers\nfrom rest_framework.fields import ReadOnlyField, URLField\nfrom rest_framework.relations import HyperlinkedRelatedField\n\nfrom grandchallenge.archives.models import Archive, ArchiveItem\nfrom grandchallenge.archives.tasks import (\n    start_archive_item_update_tasks,\n    update_archive_item_update_kwargs,\n)\nfrom grandchallenge.components.serializers import (\n    ComponentInterfaceValuePostSerializer,\n    HyperlinkedComponentInterfaceValueSerializer,\n)\nfrom grandchallenge.hanging_protocols.serializers import (\n    HangingProtocolSerializer,\n)\n\n\nclass ArchiveItemSerializer(serializers.ModelSerializer):\n    archive = HyperlinkedRelatedField(\n        read_only=True, view_name=\"api:archive-detail\"\n    )\n    values = HyperlinkedComponentInterfaceValueSerializer(many=True)\n\n    class Meta:\n        model = ArchiveItem\n        fields = (\"pk\", \"archive\", \"values\")\n\n\nclass ArchiveSerializer(serializers.ModelSerializer):\n    algorithms = HyperlinkedRelatedField(\n        read_only=True, many=True, view_name=\"api:algorithm-detail\"\n    )\n    logo = URLField(source=\"logo.x20.url\", read_only=True)\n    url = URLField(source=\"get_absolute_url\", read_only=True)\n    # Include the read only name for legacy clients\n    name = ReadOnlyField()\n    hanging_protocol = HangingProtocolSerializer()\n\n    class Meta:\n        model = Archive\n        fields = (\n            \"pk\",\n            \"name\",\n            \"title\",\n            \"algorithms\",\n            \"logo\",\n            \"description\",\n            \"api_url\",\n            \"url\",\n            \"hanging_protocol\",\n            \"view_content\",\n        )\n\n\nclass ArchiveItemPostSerializer(ArchiveItemSerializer):\n    archive = HyperlinkedRelatedField(\n        queryset=Archive.objects.none(),\n        view_name=\"api:archive-detail\",\n        write_only=True,\n    )\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self.fields[\"values\"] = ComponentInterfaceValuePostSerializer(\n            many=True, context=self.context\n        )\n\n        if \"request\" in self.context:\n            user = self.context[\"request\"].user\n\n            self.fields[\"archive\"].queryset = get_objects_for_user(\n                user, \"archives.use_archive\", accept_global_perms=False\n            )\n\n    def update(self, instance, validated_data):\n        civs = validated_data.pop(\"values\")\n\n        civ_pks_to_remove = set()\n        civ_pks_to_add = set()\n        upload_pks = {}\n\n        for civ in civs:\n            interface = civ.pop(\"interface\", None)\n            upload_session = civ.pop(\"upload_session\", None)\n            value = civ.pop(\"value\", None)\n            image = civ.pop(\"image\", None)\n            user_upload = civ.pop(\"user_upload\", None)\n\n            update_archive_item_update_kwargs(\n                instance=instance,\n                interface=interface,\n                value=value,\n                image=image,\n                user_upload=user_upload,\n                upload_session=upload_session,\n                civ_pks_to_add=civ_pks_to_add,\n                civ_pks_to_remove=civ_pks_to_remove,\n                upload_pks=upload_pks,\n            )\n\n        on_commit(\n            start_archive_item_update_tasks.signature(\n                kwargs={\n                    \"archive_item_pk\": instance.pk,\n                    \"civ_pks_to_add\": list(civ_pks_to_add),\n                    \"civ_pks_to_remove\": list(civ_pks_to_remove),\n                    \"upload_pks\": upload_pks,\n                }\n            ).apply_async\n        )\n\n        return instance\n", "path": "app/grandchallenge/archives/serializers.py"}]}