We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Lien erroné dans le MP d'ajout à la rédaction d'un contenu
**Description du bug**

Le second lien du MP que l'on reçoit lorsqu'on est ajouté comme auteur à un contenu mène vers une page 404.


**Comment reproduire ?**

La liste des étapes qui permet de reproduire le bug :

1. Avec `user1`, créer un billet
2. Ajouter `user2` comme co-auteur du billet
3. Se connecter comme `user2`et consulter le MP reçu correspondant à l'ajout comme auteur au billet
4. Dans le contenu du MP, le second lien (_Il a été ajouté à la liste de vos contenus en rédaction **ici**._) mène vers une 404.

**Comportement attendu**

Je ne sais pas vraiment quel lien est attendu ici... La liste des contenus en cours de rédaction ?


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `zds/tutorialv2/views/authors.py`
Content:
```
1 from django.conf import settings
2 from django.contrib import messages
3 from django.contrib.auth.models import User
4 from django.shortcuts import get_object_or_404, redirect
5 from django.template.loader import render_to_string
6 from django.urls import reverse
7 from django.utils.text import format_lazy
8 from django.utils.translation import gettext_lazy as _
9 
10 from zds.gallery.models import UserGallery, GALLERY_WRITE
11 from zds.member.decorator import LoggedWithReadWriteHability
12 from zds.tutorialv2 import signals
13 
14 from zds.tutorialv2.forms import AuthorForm, RemoveAuthorForm
15 from zds.tutorialv2.mixins import SingleContentFormViewMixin
16 from zds.utils.models import get_hat_from_settings
17 from zds.mp.utils import send_mp
18 
19 
20 class AddAuthorToContent(LoggedWithReadWriteHability, SingleContentFormViewMixin):
21     only_draft_version = True
22     must_be_author = True
23     form_class = AuthorForm
24     authorized_for_staff = True
25 
26     def get(self, request, *args, **kwargs):
27         content = self.get_object()
28         url = "content:find-{}".format("tutorial" if content.is_tutorial() else content.type.lower())
29         return redirect(url, self.request.user)
30 
31     def form_valid(self, form):
32 
33         _type = _("de l'article")
34 
35         if self.object.is_tutorial:
36             _type = _("du tutoriel")
37         elif self.object.is_opinion:
38             _type = _("du billet")
39 
40         bot = get_object_or_404(User, username=settings.ZDS_APP["member"]["bot_account"])
41         all_authors_pk = [author.pk for author in self.object.authors.all()]
42         for user in form.cleaned_data["users"]:
43             if user.pk not in all_authors_pk:
44                 self.object.authors.add(user)
45                 if self.object.validation_private_message:
46                     self.object.validation_private_message.add_participant(user)
47                 all_authors_pk.append(user.pk)
48                 if user != self.request.user:
49                     url_index = reverse(self.object.type.lower() + ":find-" + self.object.type.lower(), args=[user.pk])
50                     send_mp(
51                         bot,
52                         [user],
53                         format_lazy("{}{}", _("Ajout à la rédaction "), _type),
54                         self.versioned_object.title,
55                         render_to_string(
56                             "tutorialv2/messages/add_author_pm.md",
57                             {
58                                 "content": self.object,
59                                 "type": _type,
60                                 "url": self.object.get_absolute_url(),
61                                 "index": url_index,
62                                 "user": user.username,
63                             },
64                         ),
65                         hat=get_hat_from_settings("validation"),
66                     )
67                 UserGallery(gallery=self.object.gallery, user=user, mode=GALLERY_WRITE).save()
68                 signals.authors_management.send(
69                     sender=self.__class__, content=self.object, performer=self.request.user, author=user, action="add"
70                 )
71         self.object.save()
72         self.success_url = self.object.get_absolute_url()
73 
74         return super().form_valid(form)
75 
76     def form_invalid(self, form):
77         messages.error(self.request, _("Les auteurs sélectionnés n'existent pas."))
78         self.success_url = self.object.get_absolute_url()
79         return super().form_valid(form)
80 
81 
82 class RemoveAuthorFromContent(LoggedWithReadWriteHability, SingleContentFormViewMixin):
83 
84     form_class = RemoveAuthorForm
85     only_draft_version = True
86     must_be_author = True
87     authorized_for_staff = True
88 
89     @staticmethod
90     def remove_author(content, user):
91         """Remove a user from the authors and ensure that he is access to the content's gallery is also removed.
92         The last author is not removed.
93 
94         :param content: the content
95         :type content: zds.tutorialv2.models.database.PublishableContent
96         :param user: the author
97         :type user: User
98         :return: ``True`` if the author was removed, ``False`` otherwise
99         """
100         if user in content.authors.all() and content.authors.count() > 1:
101             gallery = UserGallery.objects.filter(user__pk=user.pk, gallery__pk=content.gallery.pk).first()
102 
103             if gallery:
104                 gallery.delete()
105 
106             content.authors.remove(user)
107             return True
108 
109         return False
110 
111     def form_valid(self, form):
112 
113         current_user = False
114         users = form.cleaned_data["users"]
115 
116         _type = (_("cet article"), _("de l'article"))
117         if self.object.is_tutorial:
118             _type = (_("ce tutoriel"), _("du tutoriel"))
119         elif self.object.is_opinion:
120             _type = (_("ce billet"), _("du billet"))
121 
122         bot = get_object_or_404(User, username=settings.ZDS_APP["member"]["bot_account"])
123         for user in users:
124             if RemoveAuthorFromContent.remove_author(self.object, user):
125                 if user.pk == self.request.user.pk:
126                     current_user = True
127                 else:
128                     send_mp(
129                         bot,
130                         [user],
131                         format_lazy("{}{}", _("Retrait de la rédaction "), _type[1]),
132                         self.versioned_object.title,
133                         render_to_string(
134                             "tutorialv2/messages/remove_author_pm.md",
135                             {
136                                 "content": self.object,
137                                 "user": user.username,
138                             },
139                         ),
140                         hat=get_hat_from_settings("validation"),
141                     )
142                 signals.authors_management.send(
143                     sender=self.__class__,
144                     content=self.object,
145                     performer=self.request.user,
146                     author=user,
147                     action="remove",
148                 )
149             else:  # if user is incorrect or alone
150                 messages.error(
151                     self.request,
152                     _(
153                         "Vous êtes le seul auteur de {} ou le membre sélectionné " "en a déjà quitté la rédaction."
154                     ).format(_type[0]),
155                 )
156                 return redirect(self.object.get_absolute_url())
157 
158         self.object.save()
159 
160         authors_list = ""
161 
162         for index, user in enumerate(form.cleaned_data["users"]):
163             if index > 0:
164                 if index == len(users) - 1:
165                     authors_list += _(" et ")
166                 else:
167                     authors_list += _(", ")
168             authors_list += user.username
169 
170         if not current_user:  # if the removed author is not current user
171             messages.success(
172                 self.request, _("Vous avez enlevé {} de la liste des auteurs de {}.").format(authors_list, _type[0])
173             )
174             self.success_url = self.object.get_absolute_url()
175         else:  # if current user is leaving the content's redaction, redirect him to a more suitable page
176             messages.success(self.request, _("Vous avez bien quitté la rédaction de {}.").format(_type[0]))
177             self.success_url = reverse(
178                 self.object.type.lower() + ":find-" + self.object.type.lower(), args=[self.request.user.username]
179             )
180         return super().form_valid(form)
181 
182     def form_invalid(self, form):
183         messages.error(self.request, _("Les auteurs sélectionnés n'existent pas."))
184         self.success_url = self.object.get_absolute_url()
185         return super().form_valid(form)
186
```
--- 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/zds/tutorialv2/views/authors.py b/zds/tutorialv2/views/authors.py
--- a/zds/tutorialv2/views/authors.py
+++ b/zds/tutorialv2/views/authors.py
@@ -46,7 +46,9 @@
                     self.object.validation_private_message.add_participant(user)
                 all_authors_pk.append(user.pk)
                 if user != self.request.user:
-                    url_index = reverse(self.object.type.lower() + ":find-" + self.object.type.lower(), args=[user.pk])
+                    url_index = reverse(
+                        self.object.type.lower() + ":find-" + self.object.type.lower(), args=[user.username]
+                    )
                     send_mp(
                         bot,
                         [user],

{"golden_diff": "diff --git a/zds/tutorialv2/views/authors.py b/zds/tutorialv2/views/authors.py\n--- a/zds/tutorialv2/views/authors.py\n+++ b/zds/tutorialv2/views/authors.py\n@@ -46,7 +46,9 @@\n                     self.object.validation_private_message.add_participant(user)\n                 all_authors_pk.append(user.pk)\n                 if user != self.request.user:\n-                    url_index = reverse(self.object.type.lower() + \":find-\" + self.object.type.lower(), args=[user.pk])\n+                    url_index = reverse(\n+                        self.object.type.lower() + \":find-\" + self.object.type.lower(), args=[user.username]\n+                    )\n                     send_mp(\n                         bot,\n                         [user],\n", "issue": "Lien erron\u00e9 dans le MP d'ajout \u00e0 la r\u00e9daction d'un contenu\n**Description du bug**\r\n\r\nLe second lien du MP que l'on re\u00e7oit lorsqu'on est ajout\u00e9 comme auteur \u00e0 un contenu m\u00e8ne vers une page 404.\r\n\r\n\r\n**Comment reproduire ?**\r\n\r\nLa liste des \u00e9tapes qui permet de reproduire le bug :\r\n\r\n1. Avec `user1`, cr\u00e9er un billet\r\n2. Ajouter `user2` comme co-auteur du billet\r\n3. Se connecter comme `user2`et consulter le MP re\u00e7u correspondant \u00e0 l'ajout comme auteur au billet\r\n4. Dans le contenu du MP, le second lien (_Il a \u00e9t\u00e9 ajout\u00e9 \u00e0 la liste de vos contenus en r\u00e9daction **ici**._) m\u00e8ne vers une 404.\r\n\r\n**Comportement attendu**\r\n\r\nJe ne sais pas vraiment quel lien est attendu ici... La liste des contenus en cours de r\u00e9daction ?\r\n\n", "before_files": [{"content": "from django.conf import settings\nfrom django.contrib import messages\nfrom django.contrib.auth.models import User\nfrom django.shortcuts import get_object_or_404, redirect\nfrom django.template.loader import render_to_string\nfrom django.urls import reverse\nfrom django.utils.text import format_lazy\nfrom django.utils.translation import gettext_lazy as _\n\nfrom zds.gallery.models import UserGallery, GALLERY_WRITE\nfrom zds.member.decorator import LoggedWithReadWriteHability\nfrom zds.tutorialv2 import signals\n\nfrom zds.tutorialv2.forms import AuthorForm, RemoveAuthorForm\nfrom zds.tutorialv2.mixins import SingleContentFormViewMixin\nfrom zds.utils.models import get_hat_from_settings\nfrom zds.mp.utils import send_mp\n\n\nclass AddAuthorToContent(LoggedWithReadWriteHability, SingleContentFormViewMixin):\n    only_draft_version = True\n    must_be_author = True\n    form_class = AuthorForm\n    authorized_for_staff = True\n\n    def get(self, request, *args, **kwargs):\n        content = self.get_object()\n        url = \"content:find-{}\".format(\"tutorial\" if content.is_tutorial() else content.type.lower())\n        return redirect(url, self.request.user)\n\n    def form_valid(self, form):\n\n        _type = _(\"de l'article\")\n\n        if self.object.is_tutorial:\n            _type = _(\"du tutoriel\")\n        elif self.object.is_opinion:\n            _type = _(\"du billet\")\n\n        bot = get_object_or_404(User, username=settings.ZDS_APP[\"member\"][\"bot_account\"])\n        all_authors_pk = [author.pk for author in self.object.authors.all()]\n        for user in form.cleaned_data[\"users\"]:\n            if user.pk not in all_authors_pk:\n                self.object.authors.add(user)\n                if self.object.validation_private_message:\n                    self.object.validation_private_message.add_participant(user)\n                all_authors_pk.append(user.pk)\n                if user != self.request.user:\n                    url_index = reverse(self.object.type.lower() + \":find-\" + self.object.type.lower(), args=[user.pk])\n                    send_mp(\n                        bot,\n                        [user],\n                        format_lazy(\"{}{}\", _(\"Ajout \u00e0 la r\u00e9daction \"), _type),\n                        self.versioned_object.title,\n                        render_to_string(\n                            \"tutorialv2/messages/add_author_pm.md\",\n                            {\n                                \"content\": self.object,\n                                \"type\": _type,\n                                \"url\": self.object.get_absolute_url(),\n                                \"index\": url_index,\n                                \"user\": user.username,\n                            },\n                        ),\n                        hat=get_hat_from_settings(\"validation\"),\n                    )\n                UserGallery(gallery=self.object.gallery, user=user, mode=GALLERY_WRITE).save()\n                signals.authors_management.send(\n                    sender=self.__class__, content=self.object, performer=self.request.user, author=user, action=\"add\"\n                )\n        self.object.save()\n        self.success_url = self.object.get_absolute_url()\n\n        return super().form_valid(form)\n\n    def form_invalid(self, form):\n        messages.error(self.request, _(\"Les auteurs s\u00e9lectionn\u00e9s n'existent pas.\"))\n        self.success_url = self.object.get_absolute_url()\n        return super().form_valid(form)\n\n\nclass RemoveAuthorFromContent(LoggedWithReadWriteHability, SingleContentFormViewMixin):\n\n    form_class = RemoveAuthorForm\n    only_draft_version = True\n    must_be_author = True\n    authorized_for_staff = True\n\n    @staticmethod\n    def remove_author(content, user):\n        \"\"\"Remove a user from the authors and ensure that he is access to the content's gallery is also removed.\n        The last author is not removed.\n\n        :param content: the content\n        :type content: zds.tutorialv2.models.database.PublishableContent\n        :param user: the author\n        :type user: User\n        :return: ``True`` if the author was removed, ``False`` otherwise\n        \"\"\"\n        if user in content.authors.all() and content.authors.count() > 1:\n            gallery = UserGallery.objects.filter(user__pk=user.pk, gallery__pk=content.gallery.pk).first()\n\n            if gallery:\n                gallery.delete()\n\n            content.authors.remove(user)\n            return True\n\n        return False\n\n    def form_valid(self, form):\n\n        current_user = False\n        users = form.cleaned_data[\"users\"]\n\n        _type = (_(\"cet article\"), _(\"de l'article\"))\n        if self.object.is_tutorial:\n            _type = (_(\"ce tutoriel\"), _(\"du tutoriel\"))\n        elif self.object.is_opinion:\n            _type = (_(\"ce billet\"), _(\"du billet\"))\n\n        bot = get_object_or_404(User, username=settings.ZDS_APP[\"member\"][\"bot_account\"])\n        for user in users:\n            if RemoveAuthorFromContent.remove_author(self.object, user):\n                if user.pk == self.request.user.pk:\n                    current_user = True\n                else:\n                    send_mp(\n                        bot,\n                        [user],\n                        format_lazy(\"{}{}\", _(\"Retrait de la r\u00e9daction \"), _type[1]),\n                        self.versioned_object.title,\n                        render_to_string(\n                            \"tutorialv2/messages/remove_author_pm.md\",\n                            {\n                                \"content\": self.object,\n                                \"user\": user.username,\n                            },\n                        ),\n                        hat=get_hat_from_settings(\"validation\"),\n                    )\n                signals.authors_management.send(\n                    sender=self.__class__,\n                    content=self.object,\n                    performer=self.request.user,\n                    author=user,\n                    action=\"remove\",\n                )\n            else:  # if user is incorrect or alone\n                messages.error(\n                    self.request,\n                    _(\n                        \"Vous \u00eates le seul auteur de {} ou le membre s\u00e9lectionn\u00e9 \" \"en a d\u00e9j\u00e0 quitt\u00e9 la r\u00e9daction.\"\n                    ).format(_type[0]),\n                )\n                return redirect(self.object.get_absolute_url())\n\n        self.object.save()\n\n        authors_list = \"\"\n\n        for index, user in enumerate(form.cleaned_data[\"users\"]):\n            if index > 0:\n                if index == len(users) - 1:\n                    authors_list += _(\" et \")\n                else:\n                    authors_list += _(\", \")\n            authors_list += user.username\n\n        if not current_user:  # if the removed author is not current user\n            messages.success(\n                self.request, _(\"Vous avez enlev\u00e9 {} de la liste des auteurs de {}.\").format(authors_list, _type[0])\n            )\n            self.success_url = self.object.get_absolute_url()\n        else:  # if current user is leaving the content's redaction, redirect him to a more suitable page\n            messages.success(self.request, _(\"Vous avez bien quitt\u00e9 la r\u00e9daction de {}.\").format(_type[0]))\n            self.success_url = reverse(\n                self.object.type.lower() + \":find-\" + self.object.type.lower(), args=[self.request.user.username]\n            )\n        return super().form_valid(form)\n\n    def form_invalid(self, form):\n        messages.error(self.request, _(\"Les auteurs s\u00e9lectionn\u00e9s n'existent pas.\"))\n        self.success_url = self.object.get_absolute_url()\n        return super().form_valid(form)\n", "path": "zds/tutorialv2/views/authors.py"}], "after_files": [{"content": "from django.conf import settings\nfrom django.contrib import messages\nfrom django.contrib.auth.models import User\nfrom django.shortcuts import get_object_or_404, redirect\nfrom django.template.loader import render_to_string\nfrom django.urls import reverse\nfrom django.utils.text import format_lazy\nfrom django.utils.translation import gettext_lazy as _\n\nfrom zds.gallery.models import UserGallery, GALLERY_WRITE\nfrom zds.member.decorator import LoggedWithReadWriteHability\nfrom zds.tutorialv2 import signals\n\nfrom zds.tutorialv2.forms import AuthorForm, RemoveAuthorForm\nfrom zds.tutorialv2.mixins import SingleContentFormViewMixin\nfrom zds.utils.models import get_hat_from_settings\nfrom zds.mp.utils import send_mp\n\n\nclass AddAuthorToContent(LoggedWithReadWriteHability, SingleContentFormViewMixin):\n    only_draft_version = True\n    must_be_author = True\n    form_class = AuthorForm\n    authorized_for_staff = True\n\n    def get(self, request, *args, **kwargs):\n        content = self.get_object()\n        url = \"content:find-{}\".format(\"tutorial\" if content.is_tutorial() else content.type.lower())\n        return redirect(url, self.request.user)\n\n    def form_valid(self, form):\n\n        _type = _(\"de l'article\")\n\n        if self.object.is_tutorial:\n            _type = _(\"du tutoriel\")\n        elif self.object.is_opinion:\n            _type = _(\"du billet\")\n\n        bot = get_object_or_404(User, username=settings.ZDS_APP[\"member\"][\"bot_account\"])\n        all_authors_pk = [author.pk for author in self.object.authors.all()]\n        for user in form.cleaned_data[\"users\"]:\n            if user.pk not in all_authors_pk:\n                self.object.authors.add(user)\n                if self.object.validation_private_message:\n                    self.object.validation_private_message.add_participant(user)\n                all_authors_pk.append(user.pk)\n                if user != self.request.user:\n                    url_index = reverse(\n                        self.object.type.lower() + \":find-\" + self.object.type.lower(), args=[user.username]\n                    )\n                    send_mp(\n                        bot,\n                        [user],\n                        format_lazy(\"{}{}\", _(\"Ajout \u00e0 la r\u00e9daction \"), _type),\n                        self.versioned_object.title,\n                        render_to_string(\n                            \"tutorialv2/messages/add_author_pm.md\",\n                            {\n                                \"content\": self.object,\n                                \"type\": _type,\n                                \"url\": self.object.get_absolute_url(),\n                                \"index\": url_index,\n                                \"user\": user.username,\n                            },\n                        ),\n                        hat=get_hat_from_settings(\"validation\"),\n                    )\n                UserGallery(gallery=self.object.gallery, user=user, mode=GALLERY_WRITE).save()\n                signals.authors_management.send(\n                    sender=self.__class__, content=self.object, performer=self.request.user, author=user, action=\"add\"\n                )\n        self.object.save()\n        self.success_url = self.object.get_absolute_url()\n\n        return super().form_valid(form)\n\n    def form_invalid(self, form):\n        messages.error(self.request, _(\"Les auteurs s\u00e9lectionn\u00e9s n'existent pas.\"))\n        self.success_url = self.object.get_absolute_url()\n        return super().form_valid(form)\n\n\nclass RemoveAuthorFromContent(LoggedWithReadWriteHability, SingleContentFormViewMixin):\n\n    form_class = RemoveAuthorForm\n    only_draft_version = True\n    must_be_author = True\n    authorized_for_staff = True\n\n    @staticmethod\n    def remove_author(content, user):\n        \"\"\"Remove a user from the authors and ensure that he is access to the content's gallery is also removed.\n        The last author is not removed.\n\n        :param content: the content\n        :type content: zds.tutorialv2.models.database.PublishableContent\n        :param user: the author\n        :type user: User\n        :return: ``True`` if the author was removed, ``False`` otherwise\n        \"\"\"\n        if user in content.authors.all() and content.authors.count() > 1:\n            gallery = UserGallery.objects.filter(user__pk=user.pk, gallery__pk=content.gallery.pk).first()\n\n            if gallery:\n                gallery.delete()\n\n            content.authors.remove(user)\n            return True\n\n        return False\n\n    def form_valid(self, form):\n\n        current_user = False\n        users = form.cleaned_data[\"users\"]\n\n        _type = (_(\"cet article\"), _(\"de l'article\"))\n        if self.object.is_tutorial:\n            _type = (_(\"ce tutoriel\"), _(\"du tutoriel\"))\n        elif self.object.is_opinion:\n            _type = (_(\"ce billet\"), _(\"du billet\"))\n\n        bot = get_object_or_404(User, username=settings.ZDS_APP[\"member\"][\"bot_account\"])\n        for user in users:\n            if RemoveAuthorFromContent.remove_author(self.object, user):\n                if user.pk == self.request.user.pk:\n                    current_user = True\n                else:\n                    send_mp(\n                        bot,\n                        [user],\n                        format_lazy(\"{}{}\", _(\"Retrait de la r\u00e9daction \"), _type[1]),\n                        self.versioned_object.title,\n                        render_to_string(\n                            \"tutorialv2/messages/remove_author_pm.md\",\n                            {\n                                \"content\": self.object,\n                                \"user\": user.username,\n                            },\n                        ),\n                        hat=get_hat_from_settings(\"validation\"),\n                    )\n                signals.authors_management.send(\n                    sender=self.__class__,\n                    content=self.object,\n                    performer=self.request.user,\n                    author=user,\n                    action=\"remove\",\n                )\n            else:  # if user is incorrect or alone\n                messages.error(\n                    self.request,\n                    _(\n                        \"Vous \u00eates le seul auteur de {} ou le membre s\u00e9lectionn\u00e9 \" \"en a d\u00e9j\u00e0 quitt\u00e9 la r\u00e9daction.\"\n                    ).format(_type[0]),\n                )\n                return redirect(self.object.get_absolute_url())\n\n        self.object.save()\n\n        authors_list = \"\"\n\n        for index, user in enumerate(form.cleaned_data[\"users\"]):\n            if index > 0:\n                if index == len(users) - 1:\n                    authors_list += _(\" et \")\n                else:\n                    authors_list += _(\", \")\n            authors_list += user.username\n\n        if not current_user:  # if the removed author is not current user\n            messages.success(\n                self.request, _(\"Vous avez enlev\u00e9 {} de la liste des auteurs de {}.\").format(authors_list, _type[0])\n            )\n            self.success_url = self.object.get_absolute_url()\n        else:  # if current user is leaving the content's redaction, redirect him to a more suitable page\n            messages.success(self.request, _(\"Vous avez bien quitt\u00e9 la r\u00e9daction de {}.\").format(_type[0]))\n            self.success_url = reverse(\n                self.object.type.lower() + \":find-\" + self.object.type.lower(), args=[self.request.user.username]\n            )\n        return super().form_valid(form)\n\n    def form_invalid(self, form):\n        messages.error(self.request, _(\"Les auteurs s\u00e9lectionn\u00e9s n'existent pas.\"))\n        self.success_url = self.object.get_absolute_url()\n        return super().form_valid(form)\n", "path": "zds/tutorialv2/views/authors.py"}]}