We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
updating progress doesn't work
Warning : i see this bug as unlinked with instance, because i saw it on my instance and on bookwyrm.social. 

When i go to the book view, i have a block with two progress, but without any print of the pages i've read. 
![bookwyrm1](https://user-images.githubusercontent.com/40766799/156523379-53341dc3-cb0a-4213-989b-e62ec0cd4b38.png)

If i want to edit the progress to add pages number read, i have the choice between two dates and the number input. So i fill in the form. with only page number filled.
![bookwyrm2](https://user-images.githubusercontent.com/40766799/156523381-37a613ff-bcad-4bd3-81c2-b9667b77c4c9.png)

Then i'm going back to the book view, but with 3 entries instead of two. page number hasn't been saved/printed and it added a new progress instead of editing it.
![bookwyrm3](https://user-images.githubusercontent.com/40766799/156523383-ed2789cb-d6b5-4d04-ae59-c5f65ff82625.png)

One problem is you can't save a progress without a comment, but even with that fix, i think progress should indicate the pages read and the pages left to be read. a more "graphic' layout could be very cool ;)

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `bookwyrm/forms/forms.py`
Content:
```
1 """ using django model forms """
2 from django import forms
3 from django.forms import widgets
4 from django.utils.translation import gettext_lazy as _
5 
6 from bookwyrm import models
7 from bookwyrm.models.user import FeedFilterChoices
8 from .custom_form import CustomForm
9 
10 
11 # pylint: disable=missing-class-docstring
12 class FeedStatusTypesForm(CustomForm):
13     class Meta:
14         model = models.User
15         fields = ["feed_status_types"]
16         help_texts = {f: None for f in fields}
17         widgets = {
18             "feed_status_types": widgets.CheckboxSelectMultiple(
19                 choices=FeedFilterChoices,
20             ),
21         }
22 
23 
24 class ImportForm(forms.Form):
25     csv_file = forms.FileField()
26 
27 
28 class ShelfForm(CustomForm):
29     class Meta:
30         model = models.Shelf
31         fields = ["user", "name", "privacy", "description"]
32 
33 
34 class GoalForm(CustomForm):
35     class Meta:
36         model = models.AnnualGoal
37         fields = ["user", "year", "goal", "privacy"]
38 
39 
40 class ReportForm(CustomForm):
41     class Meta:
42         model = models.Report
43         fields = ["user", "reporter", "status", "links", "note"]
44 
45 
46 class ReadThroughForm(CustomForm):
47     def clean(self):
48         """make sure the email isn't in use by a registered user"""
49         cleaned_data = super().clean()
50         start_date = cleaned_data.get("start_date")
51         finish_date = cleaned_data.get("finish_date")
52         if start_date and finish_date and start_date > finish_date:
53             self.add_error(
54                 "finish_date", _("Reading finish date cannot be before start date.")
55             )
56 
57     class Meta:
58         model = models.ReadThrough
59         fields = ["user", "book", "start_date", "finish_date"]
60
```
--- 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/bookwyrm/forms/forms.py b/bookwyrm/forms/forms.py
--- a/bookwyrm/forms/forms.py
+++ b/bookwyrm/forms/forms.py
@@ -45,7 +45,7 @@
 
 class ReadThroughForm(CustomForm):
     def clean(self):
-        """make sure the email isn't in use by a registered user"""
+        """don't let readthroughs end before they start"""
         cleaned_data = super().clean()
         start_date = cleaned_data.get("start_date")
         finish_date = cleaned_data.get("finish_date")

{"golden_diff": "diff --git a/bookwyrm/forms/forms.py b/bookwyrm/forms/forms.py\n--- a/bookwyrm/forms/forms.py\n+++ b/bookwyrm/forms/forms.py\n@@ -45,7 +45,7 @@\n \n class ReadThroughForm(CustomForm):\n     def clean(self):\n-        \"\"\"make sure the email isn't in use by a registered user\"\"\"\n+        \"\"\"don't let readthroughs end before they start\"\"\"\n         cleaned_data = super().clean()\n         start_date = cleaned_data.get(\"start_date\")\n         finish_date = cleaned_data.get(\"finish_date\")\n", "issue": "updating progress doesn't work\nWarning : i see this bug as unlinked with instance, because i saw it on my instance and on bookwyrm.social. \r\n\r\nWhen i go to the book view, i have a block with two progress, but without any print of the pages i've read. \r\n![bookwyrm1](https://user-images.githubusercontent.com/40766799/156523379-53341dc3-cb0a-4213-989b-e62ec0cd4b38.png)\r\n\r\nIf i want to edit the progress to add pages number read, i have the choice between two dates and the number input. So i fill in the form. with only page number filled.\r\n![bookwyrm2](https://user-images.githubusercontent.com/40766799/156523381-37a613ff-bcad-4bd3-81c2-b9667b77c4c9.png)\r\n\r\nThen i'm going back to the book view, but with 3 entries instead of two. page number hasn't been saved/printed and it added a new progress instead of editing it.\r\n![bookwyrm3](https://user-images.githubusercontent.com/40766799/156523383-ed2789cb-d6b5-4d04-ae59-c5f65ff82625.png)\r\n\r\nOne problem is you can't save a progress without a comment, but even with that fix, i think progress should indicate the pages read and the pages left to be read. a more \"graphic' layout could be very cool ;)\n", "before_files": [{"content": "\"\"\" using django model forms \"\"\"\nfrom django import forms\nfrom django.forms import widgets\nfrom django.utils.translation import gettext_lazy as _\n\nfrom bookwyrm import models\nfrom bookwyrm.models.user import FeedFilterChoices\nfrom .custom_form import CustomForm\n\n\n# pylint: disable=missing-class-docstring\nclass FeedStatusTypesForm(CustomForm):\n    class Meta:\n        model = models.User\n        fields = [\"feed_status_types\"]\n        help_texts = {f: None for f in fields}\n        widgets = {\n            \"feed_status_types\": widgets.CheckboxSelectMultiple(\n                choices=FeedFilterChoices,\n            ),\n        }\n\n\nclass ImportForm(forms.Form):\n    csv_file = forms.FileField()\n\n\nclass ShelfForm(CustomForm):\n    class Meta:\n        model = models.Shelf\n        fields = [\"user\", \"name\", \"privacy\", \"description\"]\n\n\nclass GoalForm(CustomForm):\n    class Meta:\n        model = models.AnnualGoal\n        fields = [\"user\", \"year\", \"goal\", \"privacy\"]\n\n\nclass ReportForm(CustomForm):\n    class Meta:\n        model = models.Report\n        fields = [\"user\", \"reporter\", \"status\", \"links\", \"note\"]\n\n\nclass ReadThroughForm(CustomForm):\n    def clean(self):\n        \"\"\"make sure the email isn't in use by a registered user\"\"\"\n        cleaned_data = super().clean()\n        start_date = cleaned_data.get(\"start_date\")\n        finish_date = cleaned_data.get(\"finish_date\")\n        if start_date and finish_date and start_date > finish_date:\n            self.add_error(\n                \"finish_date\", _(\"Reading finish date cannot be before start date.\")\n            )\n\n    class Meta:\n        model = models.ReadThrough\n        fields = [\"user\", \"book\", \"start_date\", \"finish_date\"]\n", "path": "bookwyrm/forms/forms.py"}], "after_files": [{"content": "\"\"\" using django model forms \"\"\"\nfrom django import forms\nfrom django.forms import widgets\nfrom django.utils.translation import gettext_lazy as _\n\nfrom bookwyrm import models\nfrom bookwyrm.models.user import FeedFilterChoices\nfrom .custom_form import CustomForm\n\n\n# pylint: disable=missing-class-docstring\nclass FeedStatusTypesForm(CustomForm):\n    class Meta:\n        model = models.User\n        fields = [\"feed_status_types\"]\n        help_texts = {f: None for f in fields}\n        widgets = {\n            \"feed_status_types\": widgets.CheckboxSelectMultiple(\n                choices=FeedFilterChoices,\n            ),\n        }\n\n\nclass ImportForm(forms.Form):\n    csv_file = forms.FileField()\n\n\nclass ShelfForm(CustomForm):\n    class Meta:\n        model = models.Shelf\n        fields = [\"user\", \"name\", \"privacy\", \"description\"]\n\n\nclass GoalForm(CustomForm):\n    class Meta:\n        model = models.AnnualGoal\n        fields = [\"user\", \"year\", \"goal\", \"privacy\"]\n\n\nclass ReportForm(CustomForm):\n    class Meta:\n        model = models.Report\n        fields = [\"user\", \"reporter\", \"status\", \"links\", \"note\"]\n\n\nclass ReadThroughForm(CustomForm):\n    def clean(self):\n        \"\"\"don't let readthroughs end before they start\"\"\"\n        cleaned_data = super().clean()\n        start_date = cleaned_data.get(\"start_date\")\n        finish_date = cleaned_data.get(\"finish_date\")\n        if start_date and finish_date and start_date > finish_date:\n            self.add_error(\n                \"finish_date\", _(\"Reading finish date cannot be before start date.\")\n            )\n\n    class Meta:\n        model = models.ReadThrough\n        fields = [\"user\", \"book\", \"start_date\", \"finish_date\"]\n", "path": "bookwyrm/forms/forms.py"}]}