[PATCH 1/2] api: do not fetch every patch in a patch detail view 404

Daniel Axtens dja at axtens.net
Tue Apr 14 16:21:01 AEST 2020

mpe and jk and sfr found that the OzLabs server was melting due
to some queries downloading every patch.

Turns out if you 404 the patch detail view in the API, d-r-f attempts
to render a listbox with every single patch to fill in the 'related'
field. The bundle API also has a similar field.

Replace the multiple selection box with a text field. You can still
(AIUI) populate the relevant patch IDs manually.

Reported-by: Jeremy Kerr <jk at ozlabs.org>
Reported-by: Michael Ellerman <mpe at ellerman.id.au>
Reported-by: Stephen Rothwell <sfr at canb.auug.org.au>
Signed-off-by: Daniel Axtens <dja at axtens.net>
 patchwork/api/bundle.py   | 3 ++-
 patchwork/api/embedded.py | 3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/patchwork/api/bundle.py b/patchwork/api/bundle.py
index b8c0f1781786..54a9266e7d73 100644
--- a/patchwork/api/bundle.py
+++ b/patchwork/api/bundle.py
@@ -62,7 +62,8 @@ class BundleSerializer(BaseHyperlinkedModelSerializer):
     project = ProjectSerializer(read_only=True)
     mbox = SerializerMethodField()
     owner = UserSerializer(read_only=True)
-    patches = PatchSerializer(many=True, required=True)
+    patches = PatchSerializer(many=True, required=True,
+                              style={'base_template': 'input.html'})
     def get_web_url(self, instance):
         request = self.context.get('request')
diff --git a/patchwork/api/embedded.py b/patchwork/api/embedded.py
index 85a30cae1cdf..cb3f07e6b998 100644
--- a/patchwork/api/embedded.py
+++ b/patchwork/api/embedded.py
@@ -141,7 +141,8 @@ class PatchSerializer(SerializedRelatedField):
 class PatchRelationSerializer(BaseHyperlinkedModelSerializer):
     """Hide the PatchRelation model, just show the list"""
-    patches = PatchSerializer(many=True)
+    patches = PatchSerializer(many=True,
+                              style={'base_template': 'input.html'})
     def to_internal_value(self, data):
         if not isinstance(data, type([])):

More information about the Patchwork mailing list