We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Support multi-line feedback
### Motivation
<!-- A clear and concise description of what the motivation for the new feature is, and what problem it is solving. -->
When users sent multiple lines of feedback, the lines are shown wrapped in the backend list. It would make the feedback more readable if the feedback was shown exactly like the user submitted it.

### Proposed Solution
<!-- A clear and concise description of the feature you would like to add, and how it solves the motivating problem. -->
- Change `CharField` to `TextField`
- Use the css class `whitespace-pre-line` when rendering feedback
- Collapse feedback which has multiple lines

### Alternatives
<!-- A clear and concise description of any alternative solutions or features you've considered, and why you're proposed solution is better. -->


### Additional Context
<!-- Add any other information or screenshots about the feature request here. -->



--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/cms/models/feedback/feedback.py`
Content:
```
1 from django.conf import settings
2 from django.db import models
3 from django.utils.text import capfirst
4 from django.utils.translation import ugettext_lazy as _
5 
6 from ...constants import feedback_ratings
7 from ...utils.translation_utils import ugettext_many_lazy as __
8 from ..languages.language import Language
9 from ..regions.region import Region
10 
11 
12 class Feedback(models.Model):
13     """
14     Database model representing feedback from app-users.
15     Do not directly create instances of this base model, but of the submodels (e.g. PageFeedback) instead.
16     """
17 
18     region = models.ForeignKey(
19         Region,
20         on_delete=models.CASCADE,
21         related_name="feedback",
22         verbose_name=_("region"),
23     )
24     language = models.ForeignKey(
25         Language,
26         on_delete=models.CASCADE,
27         related_name="feedback",
28         verbose_name=_("language"),
29     )
30     #: Manage choices in :mod:`cms.constants.feedback_ratings`
31     rating = models.BooleanField(
32         null=True,
33         blank=True,
34         default=feedback_ratings.NOT_STATED,
35         choices=feedback_ratings.CHOICES,
36         verbose_name=_("rating"),
37         help_text=_("Whether the feedback is positive or negative"),
38     )
39     comment = models.CharField(max_length=1000, blank=True, verbose_name=_("comment"))
40     is_technical = models.BooleanField(
41         verbose_name=_("technical"),
42         help_text=_("Whether or not the feedback is targeted at the developers"),
43     )
44     read_by = models.ForeignKey(
45         settings.AUTH_USER_MODEL,
46         null=True,
47         blank=True,
48         on_delete=models.SET_NULL,
49         related_name="feedback",
50         verbose_name=_("marked as read by"),
51         help_text=__(
52             _("The user who marked this feedback as read."),
53             _("If the feedback is unread, this field is empty."),
54         ),
55     )
56     created_date = models.DateTimeField(
57         auto_now_add=True,
58         verbose_name=_("creation date"),
59     )
60 
61     @property
62     def submodel_instance(self):
63         """
64         This property returns the submodel instance (e.g. PageFeedback) of a Feedback instance.
65         """
66         # In this case we need type() instead of isinstance(), because we want to differ between inherited models
67         # pylint: disable=unidiomatic-typecheck
68         if type(self) != Feedback:
69             raise NotImplementedError(
70                 "Use submodel_instance only on instances of the base Feedback model, not on submodels."
71             )
72         for submodel in Feedback.__subclasses__():
73             # Inherited models automatically get their name as lowercase assigned as reverse relationship from the base class
74             reverse_related_name = submodel.__name__.lower()
75             if hasattr(self, reverse_related_name):
76                 return getattr(self, reverse_related_name)
77         raise TypeError(
78             "Do not directly create instances of the Feedback base model, but of the submodels (e.g. PageFeedback) instead."
79         )
80 
81     @property
82     def category(self):
83         """
84         This property returns the category (verbose name of the submodel) of this feedback object.
85         """
86         return capfirst(type(self.submodel_instance)._meta.verbose_name)
87 
88     @property
89     def object_name(self):
90         """
91         This property returns the name of the object this feedback comments on.
92         To be implemented in the inheriting model.
93         """
94         return self.submodel_instance.object_name
95 
96     @property
97     def object_url(self):
98         """
99         This property returns the url to the object this feedback comments on.
100         To be implemented in the inheriting model.
101         """
102         return self.submodel_instance.object_url
103 
104     @property
105     def related_feedback(self):
106         """
107         This property returns all feedback entries which relate to the same object and have the same is_technical value.
108 
109         :return: The queryset of related feedback
110         :rtype: ~django.db.models.query.QuerySet [ ~cms.models.feedback.feedback.Feedback ]
111         """
112         return self.submodel_instance.related_feedback
113 
114     @property
115     def rating_sum_positive(self):
116         """
117         This property returns the sum of the up-ratings of this object.
118 
119         :return: The number of positive ratings on this feedback object
120         :rtype: int
121         """
122         # Enable this property on instances of the base Feedback model
123         # In this case we need type() instead of isinstance(), because we want to differ between inherited models
124         # pylint: disable=unidiomatic-typecheck
125         if type(self) == Feedback:
126             instance = self.submodel_instance
127         else:
128             instance = self
129         return instance.related_feedback.filter(
130             rating=feedback_ratings.POSITIVE
131         ).count()
132 
133     @property
134     def rating_sum_negative(self):
135         """
136         This property returns the sum of the down-ratings of this object.
137 
138         :return: The number of negative ratings on this feedback object
139         :rtype: int
140         """
141         # Enable this property on instances of the base Feedback model
142         # In this case we need type() instead of isinstance(), because we want to differ between inherited models
143         # pylint: disable=unidiomatic-typecheck
144         if type(self) == Feedback:
145             instance = self.submodel_instance
146         else:
147             instance = self
148         return instance.related_feedback.filter(
149             rating=feedback_ratings.NEGATIVE
150         ).count()
151 
152     @property
153     def read(self):
154         """
155         This property returns whether or not the feedback is marked as read or not.
156         It is ``True`` if :attr:`~cms.models.feedback.feedback.Feedback.read_by` is set and ``False`` otherwise.
157         """
158         return bool(self.read_by)
159 
160     class Meta:
161         #: The verbose name of the model
162         verbose_name = _("feedback")
163         #: The plural verbose name of the model
164         verbose_name_plural = _("feedback")
165         #: The fields which are used to sort the returned objects of a QuerySet
166         ordering = ["-created_date"]
167         #: The default permissions for this model
168         default_permissions = ()
169         #:  The custom permissions for this model
170         permissions = (("manage_feedback", "Can manage feedback"),)
171
```
--- 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/src/cms/models/feedback/feedback.py b/src/cms/models/feedback/feedback.py
--- a/src/cms/models/feedback/feedback.py
+++ b/src/cms/models/feedback/feedback.py
@@ -36,7 +36,7 @@
         verbose_name=_("rating"),
         help_text=_("Whether the feedback is positive or negative"),
     )
-    comment = models.CharField(max_length=1000, blank=True, verbose_name=_("comment"))
+    comment = models.TextField(blank=True, verbose_name=_("comment"))
     is_technical = models.BooleanField(
         verbose_name=_("technical"),
         help_text=_("Whether or not the feedback is targeted at the developers"),

{"golden_diff": "diff --git a/src/cms/models/feedback/feedback.py b/src/cms/models/feedback/feedback.py\n--- a/src/cms/models/feedback/feedback.py\n+++ b/src/cms/models/feedback/feedback.py\n@@ -36,7 +36,7 @@\n         verbose_name=_(\"rating\"),\n         help_text=_(\"Whether the feedback is positive or negative\"),\n     )\n-    comment = models.CharField(max_length=1000, blank=True, verbose_name=_(\"comment\"))\n+    comment = models.TextField(blank=True, verbose_name=_(\"comment\"))\n     is_technical = models.BooleanField(\n         verbose_name=_(\"technical\"),\n         help_text=_(\"Whether or not the feedback is targeted at the developers\"),\n", "issue": "Support multi-line feedback\n### Motivation\r\n<!-- A clear and concise description of what the motivation for the new feature is, and what problem it is solving. -->\r\nWhen users sent multiple lines of feedback, the lines are shown wrapped in the backend list. It would make the feedback more readable if the feedback was shown exactly like the user submitted it.\r\n\r\n### Proposed Solution\r\n<!-- A clear and concise description of the feature you would like to add, and how it solves the motivating problem. -->\r\n- Change `CharField` to `TextField`\r\n- Use the css class `whitespace-pre-line` when rendering feedback\r\n- Collapse feedback which has multiple lines\r\n\r\n### Alternatives\r\n<!-- A clear and concise description of any alternative solutions or features you've considered, and why you're proposed solution is better. -->\r\n\r\n\r\n### Additional Context\r\n<!-- Add any other information or screenshots about the feature request here. -->\r\n\r\n\n", "before_files": [{"content": "from django.conf import settings\nfrom django.db import models\nfrom django.utils.text import capfirst\nfrom django.utils.translation import ugettext_lazy as _\n\nfrom ...constants import feedback_ratings\nfrom ...utils.translation_utils import ugettext_many_lazy as __\nfrom ..languages.language import Language\nfrom ..regions.region import Region\n\n\nclass Feedback(models.Model):\n    \"\"\"\n    Database model representing feedback from app-users.\n    Do not directly create instances of this base model, but of the submodels (e.g. PageFeedback) instead.\n    \"\"\"\n\n    region = models.ForeignKey(\n        Region,\n        on_delete=models.CASCADE,\n        related_name=\"feedback\",\n        verbose_name=_(\"region\"),\n    )\n    language = models.ForeignKey(\n        Language,\n        on_delete=models.CASCADE,\n        related_name=\"feedback\",\n        verbose_name=_(\"language\"),\n    )\n    #: Manage choices in :mod:`cms.constants.feedback_ratings`\n    rating = models.BooleanField(\n        null=True,\n        blank=True,\n        default=feedback_ratings.NOT_STATED,\n        choices=feedback_ratings.CHOICES,\n        verbose_name=_(\"rating\"),\n        help_text=_(\"Whether the feedback is positive or negative\"),\n    )\n    comment = models.CharField(max_length=1000, blank=True, verbose_name=_(\"comment\"))\n    is_technical = models.BooleanField(\n        verbose_name=_(\"technical\"),\n        help_text=_(\"Whether or not the feedback is targeted at the developers\"),\n    )\n    read_by = models.ForeignKey(\n        settings.AUTH_USER_MODEL,\n        null=True,\n        blank=True,\n        on_delete=models.SET_NULL,\n        related_name=\"feedback\",\n        verbose_name=_(\"marked as read by\"),\n        help_text=__(\n            _(\"The user who marked this feedback as read.\"),\n            _(\"If the feedback is unread, this field is empty.\"),\n        ),\n    )\n    created_date = models.DateTimeField(\n        auto_now_add=True,\n        verbose_name=_(\"creation date\"),\n    )\n\n    @property\n    def submodel_instance(self):\n        \"\"\"\n        This property returns the submodel instance (e.g. PageFeedback) of a Feedback instance.\n        \"\"\"\n        # In this case we need type() instead of isinstance(), because we want to differ between inherited models\n        # pylint: disable=unidiomatic-typecheck\n        if type(self) != Feedback:\n            raise NotImplementedError(\n                \"Use submodel_instance only on instances of the base Feedback model, not on submodels.\"\n            )\n        for submodel in Feedback.__subclasses__():\n            # Inherited models automatically get their name as lowercase assigned as reverse relationship from the base class\n            reverse_related_name = submodel.__name__.lower()\n            if hasattr(self, reverse_related_name):\n                return getattr(self, reverse_related_name)\n        raise TypeError(\n            \"Do not directly create instances of the Feedback base model, but of the submodels (e.g. PageFeedback) instead.\"\n        )\n\n    @property\n    def category(self):\n        \"\"\"\n        This property returns the category (verbose name of the submodel) of this feedback object.\n        \"\"\"\n        return capfirst(type(self.submodel_instance)._meta.verbose_name)\n\n    @property\n    def object_name(self):\n        \"\"\"\n        This property returns the name of the object this feedback comments on.\n        To be implemented in the inheriting model.\n        \"\"\"\n        return self.submodel_instance.object_name\n\n    @property\n    def object_url(self):\n        \"\"\"\n        This property returns the url to the object this feedback comments on.\n        To be implemented in the inheriting model.\n        \"\"\"\n        return self.submodel_instance.object_url\n\n    @property\n    def related_feedback(self):\n        \"\"\"\n        This property returns all feedback entries which relate to the same object and have the same is_technical value.\n\n        :return: The queryset of related feedback\n        :rtype: ~django.db.models.query.QuerySet [ ~cms.models.feedback.feedback.Feedback ]\n        \"\"\"\n        return self.submodel_instance.related_feedback\n\n    @property\n    def rating_sum_positive(self):\n        \"\"\"\n        This property returns the sum of the up-ratings of this object.\n\n        :return: The number of positive ratings on this feedback object\n        :rtype: int\n        \"\"\"\n        # Enable this property on instances of the base Feedback model\n        # In this case we need type() instead of isinstance(), because we want to differ between inherited models\n        # pylint: disable=unidiomatic-typecheck\n        if type(self) == Feedback:\n            instance = self.submodel_instance\n        else:\n            instance = self\n        return instance.related_feedback.filter(\n            rating=feedback_ratings.POSITIVE\n        ).count()\n\n    @property\n    def rating_sum_negative(self):\n        \"\"\"\n        This property returns the sum of the down-ratings of this object.\n\n        :return: The number of negative ratings on this feedback object\n        :rtype: int\n        \"\"\"\n        # Enable this property on instances of the base Feedback model\n        # In this case we need type() instead of isinstance(), because we want to differ between inherited models\n        # pylint: disable=unidiomatic-typecheck\n        if type(self) == Feedback:\n            instance = self.submodel_instance\n        else:\n            instance = self\n        return instance.related_feedback.filter(\n            rating=feedback_ratings.NEGATIVE\n        ).count()\n\n    @property\n    def read(self):\n        \"\"\"\n        This property returns whether or not the feedback is marked as read or not.\n        It is ``True`` if :attr:`~cms.models.feedback.feedback.Feedback.read_by` is set and ``False`` otherwise.\n        \"\"\"\n        return bool(self.read_by)\n\n    class Meta:\n        #: The verbose name of the model\n        verbose_name = _(\"feedback\")\n        #: The plural verbose name of the model\n        verbose_name_plural = _(\"feedback\")\n        #: The fields which are used to sort the returned objects of a QuerySet\n        ordering = [\"-created_date\"]\n        #: The default permissions for this model\n        default_permissions = ()\n        #:  The custom permissions for this model\n        permissions = ((\"manage_feedback\", \"Can manage feedback\"),)\n", "path": "src/cms/models/feedback/feedback.py"}], "after_files": [{"content": "from django.conf import settings\nfrom django.db import models\nfrom django.utils.text import capfirst\nfrom django.utils.translation import ugettext_lazy as _\n\nfrom ...constants import feedback_ratings\nfrom ...utils.translation_utils import ugettext_many_lazy as __\nfrom ..languages.language import Language\nfrom ..regions.region import Region\n\n\nclass Feedback(models.Model):\n    \"\"\"\n    Database model representing feedback from app-users.\n    Do not directly create instances of this base model, but of the submodels (e.g. PageFeedback) instead.\n    \"\"\"\n\n    region = models.ForeignKey(\n        Region,\n        on_delete=models.CASCADE,\n        related_name=\"feedback\",\n        verbose_name=_(\"region\"),\n    )\n    language = models.ForeignKey(\n        Language,\n        on_delete=models.CASCADE,\n        related_name=\"feedback\",\n        verbose_name=_(\"language\"),\n    )\n    #: Manage choices in :mod:`cms.constants.feedback_ratings`\n    rating = models.BooleanField(\n        null=True,\n        blank=True,\n        default=feedback_ratings.NOT_STATED,\n        choices=feedback_ratings.CHOICES,\n        verbose_name=_(\"rating\"),\n        help_text=_(\"Whether the feedback is positive or negative\"),\n    )\n    comment = models.TextField(blank=True, verbose_name=_(\"comment\"))\n    is_technical = models.BooleanField(\n        verbose_name=_(\"technical\"),\n        help_text=_(\"Whether or not the feedback is targeted at the developers\"),\n    )\n    read_by = models.ForeignKey(\n        settings.AUTH_USER_MODEL,\n        null=True,\n        blank=True,\n        on_delete=models.SET_NULL,\n        related_name=\"feedback\",\n        verbose_name=_(\"marked as read by\"),\n        help_text=__(\n            _(\"The user who marked this feedback as read.\"),\n            _(\"If the feedback is unread, this field is empty.\"),\n        ),\n    )\n    created_date = models.DateTimeField(\n        auto_now_add=True,\n        verbose_name=_(\"creation date\"),\n    )\n\n    @property\n    def submodel_instance(self):\n        \"\"\"\n        This property returns the submodel instance (e.g. PageFeedback) of a Feedback instance.\n        \"\"\"\n        # In this case we need type() instead of isinstance(), because we want to differ between inherited models\n        # pylint: disable=unidiomatic-typecheck\n        if type(self) != Feedback:\n            raise NotImplementedError(\n                \"Use submodel_instance only on instances of the base Feedback model, not on submodels.\"\n            )\n        for submodel in Feedback.__subclasses__():\n            # Inherited models automatically get their name as lowercase assigned as reverse relationship from the base class\n            reverse_related_name = submodel.__name__.lower()\n            if hasattr(self, reverse_related_name):\n                return getattr(self, reverse_related_name)\n        raise TypeError(\n            \"Do not directly create instances of the Feedback base model, but of the submodels (e.g. PageFeedback) instead.\"\n        )\n\n    @property\n    def category(self):\n        \"\"\"\n        This property returns the category (verbose name of the submodel) of this feedback object.\n        \"\"\"\n        return capfirst(type(self.submodel_instance)._meta.verbose_name)\n\n    @property\n    def object_name(self):\n        \"\"\"\n        This property returns the name of the object this feedback comments on.\n        To be implemented in the inheriting model.\n        \"\"\"\n        return self.submodel_instance.object_name\n\n    @property\n    def object_url(self):\n        \"\"\"\n        This property returns the url to the object this feedback comments on.\n        To be implemented in the inheriting model.\n        \"\"\"\n        return self.submodel_instance.object_url\n\n    @property\n    def related_feedback(self):\n        \"\"\"\n        This property returns all feedback entries which relate to the same object and have the same is_technical value.\n\n        :return: The queryset of related feedback\n        :rtype: ~django.db.models.query.QuerySet [ ~cms.models.feedback.feedback.Feedback ]\n        \"\"\"\n        return self.submodel_instance.related_feedback\n\n    @property\n    def rating_sum_positive(self):\n        \"\"\"\n        This property returns the sum of the up-ratings of this object.\n\n        :return: The number of positive ratings on this feedback object\n        :rtype: int\n        \"\"\"\n        # Enable this property on instances of the base Feedback model\n        # In this case we need type() instead of isinstance(), because we want to differ between inherited models\n        # pylint: disable=unidiomatic-typecheck\n        if type(self) == Feedback:\n            instance = self.submodel_instance\n        else:\n            instance = self\n        return instance.related_feedback.filter(\n            rating=feedback_ratings.POSITIVE\n        ).count()\n\n    @property\n    def rating_sum_negative(self):\n        \"\"\"\n        This property returns the sum of the down-ratings of this object.\n\n        :return: The number of negative ratings on this feedback object\n        :rtype: int\n        \"\"\"\n        # Enable this property on instances of the base Feedback model\n        # In this case we need type() instead of isinstance(), because we want to differ between inherited models\n        # pylint: disable=unidiomatic-typecheck\n        if type(self) == Feedback:\n            instance = self.submodel_instance\n        else:\n            instance = self\n        return instance.related_feedback.filter(\n            rating=feedback_ratings.NEGATIVE\n        ).count()\n\n    @property\n    def read(self):\n        \"\"\"\n        This property returns whether or not the feedback is marked as read or not.\n        It is ``True`` if :attr:`~cms.models.feedback.feedback.Feedback.read_by` is set and ``False`` otherwise.\n        \"\"\"\n        return bool(self.read_by)\n\n    class Meta:\n        #: The verbose name of the model\n        verbose_name = _(\"feedback\")\n        #: The plural verbose name of the model\n        verbose_name_plural = _(\"feedback\")\n        #: The fields which are used to sort the returned objects of a QuerySet\n        ordering = [\"-created_date\"]\n        #: The default permissions for this model\n        default_permissions = ()\n        #:  The custom permissions for this model\n        permissions = ((\"manage_feedback\", \"Can manage feedback\"),)\n", "path": "src/cms/models/feedback/feedback.py"}]}