We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
adding multiple answer text to answer page


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `adhocracy4/comments_async/serializers.py`
Content:
```
1 from django.conf import settings
2 from django.utils.translation import ugettext as _
3 from easy_thumbnails.files import get_thumbnailer
4 from rest_framework import serializers
5 
6 from adhocracy4.comments.models import Comment
7 
8 
9 class CommentSerializer(serializers.ModelSerializer):
10     """Default Serializer for the comments."""
11 
12     user_name = serializers.SerializerMethodField()
13     user_pk = serializers.SerializerMethodField()
14     user_profile_url = serializers.SerializerMethodField()
15     user_image = serializers.SerializerMethodField()
16     is_deleted = serializers.SerializerMethodField()
17     ratings = serializers.SerializerMethodField()
18     is_moderator = serializers.SerializerMethodField()
19 
20     class Meta:
21         model = Comment
22         read_only_fields = ('modified', 'created', 'id',
23                             'user_name', 'user_pk', 'user_image',
24                             'ratings', 'content_type', 'object_pk')
25         exclude = ('creator', 'is_censored', 'is_removed')
26 
27     def to_representation(self, instance):
28         """
29         Create a dictionary form categories.
30 
31         Gets the categories and adds them along with their values
32         to a dictionary.
33         """
34         ret = super().to_representation(instance)
35         categories = {}
36         if ret['comment_categories']:
37             category_choices = getattr(settings,
38                                        'A4_COMMENT_CATEGORIES', '')
39             if category_choices:
40                 category_choices = dict((x, str(y)) for x, y
41                                         in category_choices)
42             category_list = ret['comment_categories'].strip('[]').split(',')
43             for category in category_list:
44                 if category in category_choices:
45                     categories[category] = category_choices[category]
46                 else:
47                     categories[category] = category
48         ret['comment_categories'] = categories
49         return ret
50 
51     def to_internal_value(self, data):
52         data = super().to_internal_value(data)
53         if 'comment_categories' in data:
54             value = data.get('comment_categories')
55             if value == '' or value == '[]':
56                 raise serializers.ValidationError({
57                     'comment_categories': _('Please choose a category')
58                 })
59         return data
60 
61     def get_user_pk(self, obj):
62         if (obj.is_censored or obj.is_removed):
63             return -1
64         return str(obj.creator.id)
65 
66     def get_user_profile_url(self, obj):
67         if obj.is_censored or obj.is_removed:
68             return ''
69         try:
70             return obj.creator.get_absolute_url()
71         except AttributeError:
72             return ''
73 
74     def get_user_name(self, obj):
75         """Don't show username if comment is marked removed or censored."""
76         if(obj.is_censored or obj.is_removed):
77             return _('unknown user')
78         return obj.creator.get_short_name()
79 
80     def get_user_image(self, obj):
81         """Load small thumbnail images for user images."""
82         if(obj.is_censored or obj.is_removed):
83             return None
84         try:
85             if obj.creator.avatar:
86                 avatar = get_thumbnailer(obj.creator.avatar)['avatar']
87                 return avatar.url
88         except AttributeError:
89             pass
90         return None
91 
92     def get_is_moderator(self, obj):
93         return obj.project.has_moderator(obj.creator)
94 
95     def get_is_deleted(self, obj):
96         """Return true if one of the flags is set."""
97         return (obj.is_censored or obj.is_removed)
98 
99     def get_ratings(self, comment):
100         """
101         Get positive and negative rating count.
102 
103         As well as info on the request users rating
104         """
105         user = self.context['request'].user
106         positive_ratings = comment.ratings.filter(value=1).count()
107         negative_ratings = comment.ratings.filter(value=-1).count()
108 
109         if user.is_authenticated:
110             user_rating = comment.ratings.filter(creator=user).first()
111         else:
112             user_rating = None
113 
114         if user_rating:
115             user_rating_value = user_rating.value
116             user_rating_id = user_rating.pk
117         else:
118             user_rating_value = None
119             user_rating_id = None
120 
121         result = {
122             'positive_ratings': positive_ratings,
123             'negative_ratings': negative_ratings,
124             'current_user_rating_value': user_rating_value,
125             'current_user_rating_id': user_rating_id
126         }
127 
128         return result
129 
130 
131 class CommentListSerializer(CommentSerializer):
132     """Serializer for the comments to be used when viewed as list."""
133 
134     comment = serializers.SerializerMethodField()
135 
136     def get_comment(self, obj):
137         if obj.is_removed:
138             return _('deleted by creator')
139         if obj.is_censored:
140             return _('deleted by moderator')
141         return obj.comment
142 
143 
144 class ThreadSerializer(CommentSerializer):
145     """Serializes a comment including child comment (replies)."""
146 
147     child_comments = CommentSerializer(many=True, read_only=True)
148 
149 
150 class ThreadListSerializer(CommentListSerializer):
151     """
152     Serializes comments when viewed.
153 
154     As list including child comment (replies).
155     """
156 
157     child_comments = CommentListSerializer(many=True, read_only=True)
158
```
--- 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/adhocracy4/comments_async/serializers.py b/adhocracy4/comments_async/serializers.py
--- a/adhocracy4/comments_async/serializers.py
+++ b/adhocracy4/comments_async/serializers.py
@@ -21,7 +21,8 @@
         model = Comment
         read_only_fields = ('modified', 'created', 'id',
                             'user_name', 'user_pk', 'user_image',
-                            'ratings', 'content_type', 'object_pk')
+                            'user_image_fallback', 'ratings',
+                            'content_type', 'object_pk')
         exclude = ('creator', 'is_censored', 'is_removed')
 
     def to_representation(self, instance):
@@ -77,6 +78,17 @@
             return _('unknown user')
         return obj.creator.get_short_name()
 
+    def get_user_image_fallback(self, obj):
+        """Load small thumbnail images for default user images."""
+        if(obj.is_censored or obj.is_removed):
+            return None
+        try:
+            if obj.creator.avatar_fallback:
+                return obj.creator.avatar_fallback
+        except AttributeError:
+            pass
+        return None
+
     def get_user_image(self, obj):
         """Load small thumbnail images for user images."""
         if(obj.is_censored or obj.is_removed):
@@ -87,7 +99,7 @@
                 return avatar.url
         except AttributeError:
             pass
-        return None
+        return self.get_user_image_fallback(obj)
 
     def get_is_moderator(self, obj):
         return obj.project.has_moderator(obj.creator)

{"golden_diff": "diff --git a/adhocracy4/comments_async/serializers.py b/adhocracy4/comments_async/serializers.py\n--- a/adhocracy4/comments_async/serializers.py\n+++ b/adhocracy4/comments_async/serializers.py\n@@ -21,7 +21,8 @@\n         model = Comment\n         read_only_fields = ('modified', 'created', 'id',\n                             'user_name', 'user_pk', 'user_image',\n-                            'ratings', 'content_type', 'object_pk')\n+                            'user_image_fallback', 'ratings',\n+                            'content_type', 'object_pk')\n         exclude = ('creator', 'is_censored', 'is_removed')\n \n     def to_representation(self, instance):\n@@ -77,6 +78,17 @@\n             return _('unknown user')\n         return obj.creator.get_short_name()\n \n+    def get_user_image_fallback(self, obj):\n+        \"\"\"Load small thumbnail images for default user images.\"\"\"\n+        if(obj.is_censored or obj.is_removed):\n+            return None\n+        try:\n+            if obj.creator.avatar_fallback:\n+                return obj.creator.avatar_fallback\n+        except AttributeError:\n+            pass\n+        return None\n+\n     def get_user_image(self, obj):\n         \"\"\"Load small thumbnail images for user images.\"\"\"\n         if(obj.is_censored or obj.is_removed):\n@@ -87,7 +99,7 @@\n                 return avatar.url\n         except AttributeError:\n             pass\n-        return None\n+        return self.get_user_image_fallback(obj)\n \n     def get_is_moderator(self, obj):\n         return obj.project.has_moderator(obj.creator)\n", "issue": "adding multiple answer text to answer page\n\n", "before_files": [{"content": "from django.conf import settings\nfrom django.utils.translation import ugettext as _\nfrom easy_thumbnails.files import get_thumbnailer\nfrom rest_framework import serializers\n\nfrom adhocracy4.comments.models import Comment\n\n\nclass CommentSerializer(serializers.ModelSerializer):\n    \"\"\"Default Serializer for the comments.\"\"\"\n\n    user_name = serializers.SerializerMethodField()\n    user_pk = serializers.SerializerMethodField()\n    user_profile_url = serializers.SerializerMethodField()\n    user_image = serializers.SerializerMethodField()\n    is_deleted = serializers.SerializerMethodField()\n    ratings = serializers.SerializerMethodField()\n    is_moderator = serializers.SerializerMethodField()\n\n    class Meta:\n        model = Comment\n        read_only_fields = ('modified', 'created', 'id',\n                            'user_name', 'user_pk', 'user_image',\n                            'ratings', 'content_type', 'object_pk')\n        exclude = ('creator', 'is_censored', 'is_removed')\n\n    def to_representation(self, instance):\n        \"\"\"\n        Create a dictionary form categories.\n\n        Gets the categories and adds them along with their values\n        to a dictionary.\n        \"\"\"\n        ret = super().to_representation(instance)\n        categories = {}\n        if ret['comment_categories']:\n            category_choices = getattr(settings,\n                                       'A4_COMMENT_CATEGORIES', '')\n            if category_choices:\n                category_choices = dict((x, str(y)) for x, y\n                                        in category_choices)\n            category_list = ret['comment_categories'].strip('[]').split(',')\n            for category in category_list:\n                if category in category_choices:\n                    categories[category] = category_choices[category]\n                else:\n                    categories[category] = category\n        ret['comment_categories'] = categories\n        return ret\n\n    def to_internal_value(self, data):\n        data = super().to_internal_value(data)\n        if 'comment_categories' in data:\n            value = data.get('comment_categories')\n            if value == '' or value == '[]':\n                raise serializers.ValidationError({\n                    'comment_categories': _('Please choose a category')\n                })\n        return data\n\n    def get_user_pk(self, obj):\n        if (obj.is_censored or obj.is_removed):\n            return -1\n        return str(obj.creator.id)\n\n    def get_user_profile_url(self, obj):\n        if obj.is_censored or obj.is_removed:\n            return ''\n        try:\n            return obj.creator.get_absolute_url()\n        except AttributeError:\n            return ''\n\n    def get_user_name(self, obj):\n        \"\"\"Don't show username if comment is marked removed or censored.\"\"\"\n        if(obj.is_censored or obj.is_removed):\n            return _('unknown user')\n        return obj.creator.get_short_name()\n\n    def get_user_image(self, obj):\n        \"\"\"Load small thumbnail images for user images.\"\"\"\n        if(obj.is_censored or obj.is_removed):\n            return None\n        try:\n            if obj.creator.avatar:\n                avatar = get_thumbnailer(obj.creator.avatar)['avatar']\n                return avatar.url\n        except AttributeError:\n            pass\n        return None\n\n    def get_is_moderator(self, obj):\n        return obj.project.has_moderator(obj.creator)\n\n    def get_is_deleted(self, obj):\n        \"\"\"Return true if one of the flags is set.\"\"\"\n        return (obj.is_censored or obj.is_removed)\n\n    def get_ratings(self, comment):\n        \"\"\"\n        Get positive and negative rating count.\n\n        As well as info on the request users rating\n        \"\"\"\n        user = self.context['request'].user\n        positive_ratings = comment.ratings.filter(value=1).count()\n        negative_ratings = comment.ratings.filter(value=-1).count()\n\n        if user.is_authenticated:\n            user_rating = comment.ratings.filter(creator=user).first()\n        else:\n            user_rating = None\n\n        if user_rating:\n            user_rating_value = user_rating.value\n            user_rating_id = user_rating.pk\n        else:\n            user_rating_value = None\n            user_rating_id = None\n\n        result = {\n            'positive_ratings': positive_ratings,\n            'negative_ratings': negative_ratings,\n            'current_user_rating_value': user_rating_value,\n            'current_user_rating_id': user_rating_id\n        }\n\n        return result\n\n\nclass CommentListSerializer(CommentSerializer):\n    \"\"\"Serializer for the comments to be used when viewed as list.\"\"\"\n\n    comment = serializers.SerializerMethodField()\n\n    def get_comment(self, obj):\n        if obj.is_removed:\n            return _('deleted by creator')\n        if obj.is_censored:\n            return _('deleted by moderator')\n        return obj.comment\n\n\nclass ThreadSerializer(CommentSerializer):\n    \"\"\"Serializes a comment including child comment (replies).\"\"\"\n\n    child_comments = CommentSerializer(many=True, read_only=True)\n\n\nclass ThreadListSerializer(CommentListSerializer):\n    \"\"\"\n    Serializes comments when viewed.\n\n    As list including child comment (replies).\n    \"\"\"\n\n    child_comments = CommentListSerializer(many=True, read_only=True)\n", "path": "adhocracy4/comments_async/serializers.py"}], "after_files": [{"content": "from django.conf import settings\nfrom django.utils.translation import ugettext as _\nfrom easy_thumbnails.files import get_thumbnailer\nfrom rest_framework import serializers\n\nfrom adhocracy4.comments.models import Comment\n\n\nclass CommentSerializer(serializers.ModelSerializer):\n    \"\"\"Default Serializer for the comments.\"\"\"\n\n    user_name = serializers.SerializerMethodField()\n    user_pk = serializers.SerializerMethodField()\n    user_profile_url = serializers.SerializerMethodField()\n    user_image = serializers.SerializerMethodField()\n    is_deleted = serializers.SerializerMethodField()\n    ratings = serializers.SerializerMethodField()\n    is_moderator = serializers.SerializerMethodField()\n\n    class Meta:\n        model = Comment\n        read_only_fields = ('modified', 'created', 'id',\n                            'user_name', 'user_pk', 'user_image',\n                            'user_image_fallback', 'ratings',\n                            'content_type', 'object_pk')\n        exclude = ('creator', 'is_censored', 'is_removed')\n\n    def to_representation(self, instance):\n        \"\"\"\n        Create a dictionary form categories.\n\n        Gets the categories and adds them along with their values\n        to a dictionary.\n        \"\"\"\n        ret = super().to_representation(instance)\n        categories = {}\n        if ret['comment_categories']:\n            category_choices = getattr(settings,\n                                       'A4_COMMENT_CATEGORIES', '')\n            if category_choices:\n                category_choices = dict((x, str(y)) for x, y\n                                        in category_choices)\n            category_list = ret['comment_categories'].strip('[]').split(',')\n            for category in category_list:\n                if category in category_choices:\n                    categories[category] = category_choices[category]\n                else:\n                    categories[category] = category\n        ret['comment_categories'] = categories\n        return ret\n\n    def to_internal_value(self, data):\n        data = super().to_internal_value(data)\n        if 'comment_categories' in data:\n            value = data.get('comment_categories')\n            if value == '' or value == '[]':\n                raise serializers.ValidationError({\n                    'comment_categories': _('Please choose a category')\n                })\n        return data\n\n    def get_user_pk(self, obj):\n        if (obj.is_censored or obj.is_removed):\n            return -1\n        return str(obj.creator.id)\n\n    def get_user_profile_url(self, obj):\n        if obj.is_censored or obj.is_removed:\n            return ''\n        try:\n            return obj.creator.get_absolute_url()\n        except AttributeError:\n            return ''\n\n    def get_user_name(self, obj):\n        \"\"\"Don't show username if comment is marked removed or censored.\"\"\"\n        if(obj.is_censored or obj.is_removed):\n            return _('unknown user')\n        return obj.creator.get_short_name()\n\n    def get_user_image_fallback(self, obj):\n        \"\"\"Load small thumbnail images for default user images.\"\"\"\n        if(obj.is_censored or obj.is_removed):\n            return None\n        try:\n            if obj.creator.avatar_fallback:\n                return obj.creator.avatar_fallback\n        except AttributeError:\n            pass\n        return None\n\n    def get_user_image(self, obj):\n        \"\"\"Load small thumbnail images for user images.\"\"\"\n        if(obj.is_censored or obj.is_removed):\n            return None\n        try:\n            if obj.creator.avatar:\n                avatar = get_thumbnailer(obj.creator.avatar)['avatar']\n                return avatar.url\n        except AttributeError:\n            pass\n        return self.get_user_image_fallback(obj)\n\n    def get_is_moderator(self, obj):\n        return obj.project.has_moderator(obj.creator)\n\n    def get_is_deleted(self, obj):\n        \"\"\"Return true if one of the flags is set.\"\"\"\n        return (obj.is_censored or obj.is_removed)\n\n    def get_ratings(self, comment):\n        \"\"\"\n        Get positive and negative rating count.\n\n        As well as info on the request users rating\n        \"\"\"\n        user = self.context['request'].user\n        positive_ratings = comment.ratings.filter(value=1).count()\n        negative_ratings = comment.ratings.filter(value=-1).count()\n\n        if user.is_authenticated:\n            user_rating = comment.ratings.filter(creator=user).first()\n        else:\n            user_rating = None\n\n        if user_rating:\n            user_rating_value = user_rating.value\n            user_rating_id = user_rating.pk\n        else:\n            user_rating_value = None\n            user_rating_id = None\n\n        result = {\n            'positive_ratings': positive_ratings,\n            'negative_ratings': negative_ratings,\n            'current_user_rating_value': user_rating_value,\n            'current_user_rating_id': user_rating_id\n        }\n\n        return result\n\n\nclass CommentListSerializer(CommentSerializer):\n    \"\"\"Serializer for the comments to be used when viewed as list.\"\"\"\n\n    comment = serializers.SerializerMethodField()\n\n    def get_comment(self, obj):\n        if obj.is_removed:\n            return _('deleted by creator')\n        if obj.is_censored:\n            return _('deleted by moderator')\n        return obj.comment\n\n\nclass ThreadSerializer(CommentSerializer):\n    \"\"\"Serializes a comment including child comment (replies).\"\"\"\n\n    child_comments = CommentSerializer(many=True, read_only=True)\n\n\nclass ThreadListSerializer(CommentListSerializer):\n    \"\"\"\n    Serializes comments when viewed.\n\n    As list including child comment (replies).\n    \"\"\"\n\n    child_comments = CommentListSerializer(many=True, read_only=True)\n", "path": "adhocracy4/comments_async/serializers.py"}]}