From 82afed2ba44643f330e2aba0db3909f38c40067e Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 5 Jun 2022 22:07:41 -0400 Subject: [PATCH] fix 500 --- books/views.py | 2 +- common/views.py | 7 +------ games/views.py | 2 +- mastodon/api.py | 8 ++++---- movies/views.py | 2 +- music/views.py | 4 ++-- users/data.py | 15 ++++++++------- users/models.py | 6 ++++++ users/views.py | 6 +----- 9 files changed, 25 insertions(+), 27 deletions(-) diff --git a/books/views.py b/books/views.py index 6d5bba7a..4bf6b717 100644 --- a/books/views.py +++ b/books/views.py @@ -167,7 +167,7 @@ def retrieve(request, id): else: mark_form = BookMarkForm(initial={ 'book': book, - 'visibility': request.user.preference.default_visibility if request.user.is_authenticated else 0, + 'visibility': request.user.get_preference().default_visibility if request.user.is_authenticated else 0, 'tags': mark_tags }) diff --git a/common/views.py b/common/views.py index b460d700..befe54d8 100644 --- a/common/views.py +++ b/common/views.py @@ -34,12 +34,7 @@ logger = logging.getLogger(__name__) @login_required def home(request): - try: - classic = request.user.preference.classic_homepage - except ObjectDoesNotExist: - Preference.objects.create(user=user) - classic = request.user.preference.classic_homepage - if classic: + if request.user.get_preference().classic_homepage: return user_home(request, request.user.id) else: return user_timeline(request) diff --git a/games/views.py b/games/views.py index 946f6852..093d3723 100644 --- a/games/views.py +++ b/games/views.py @@ -168,7 +168,7 @@ def retrieve(request, id): else: mark_form = GameMarkForm(initial={ 'game': game, - 'visibility': request.user.preference.default_visibility if request.user.is_authenticated else 0, + 'visibility': request.user.get_preference().default_visibility if request.user.is_authenticated else 0, 'tags': mark_tags }) diff --git a/mastodon/api.py b/mastodon/api.py index d73bf57c..ed4f183d 100644 --- a/mastodon/api.py +++ b/mastodon/api.py @@ -388,11 +388,11 @@ def share_mark(mark): visibility = TootVisibilityEnum.DIRECT elif mark.visibility == 1: visibility = TootVisibilityEnum.PRIVATE - elif user.preference.mastodon_publish_public: + elif user.get_preference().mastodon_publish_public: visibility = TootVisibilityEnum.PUBLIC else: visibility = TootVisibilityEnum.UNLISTED - tags = '\n' + user.preference.mastodon_append_tag.replace('[category]', str(mark.item.verbose_category_name)) if user.preference.mastodon_append_tag else '' + tags = '\n' + user.get_preference().mastodon_append_tag.replace('[category]', str(mark.item.verbose_category_name)) if user.get_preference().mastodon_append_tag else '' stars = rating_to_emoji(mark.rating, MastodonApplication.objects.get(domain_name=user.mastodon_site).star_mode) content = f"{mark.translated_status}《{mark.item.title}》{stars}\n{mark.item.url}\n{mark.text}{tags}" response = post_toot(user.mastodon_site, content, visibility, user.mastodon_token) @@ -415,11 +415,11 @@ def share_review(review): visibility = TootVisibilityEnum.DIRECT elif review.visibility == 1: visibility = TootVisibilityEnum.PRIVATE - elif user.preference.mastodon_publish_public: + elif user.get_preference().mastodon_publish_public: visibility = TootVisibilityEnum.PUBLIC else: visibility = TootVisibilityEnum.UNLISTED - tags = '\n' + user.preference.mastodon_append_tag.replace('[category]', str(review.item.verbose_category_name)) if user.preference.mastodon_append_tag else '' + tags = '\n' + user.get_preference().mastodon_append_tag.replace('[category]', str(review.item.verbose_category_name)) if user.get_preference().mastodon_append_tag else '' content = f"发布了关于《{review.item.title}》的评论\n{review.url}\n{review.title}{tags}" response = post_toot(user.mastodon_site, content, visibility, user.mastodon_token) if response and response.status_code in [200, 201]: diff --git a/movies/views.py b/movies/views.py index e07636f2..8afea850 100644 --- a/movies/views.py +++ b/movies/views.py @@ -168,7 +168,7 @@ def retrieve(request, id): else: mark_form = MovieMarkForm(initial={ 'movie': movie, - 'visibility': request.user.preference.default_visibility if request.user.is_authenticated else 0, + 'visibility': request.user.get_preference().default_visibility if request.user.is_authenticated else 0, 'tags': mark_tags }) diff --git a/music/views.py b/music/views.py index 5962a3da..e0ac8495 100644 --- a/music/views.py +++ b/music/views.py @@ -186,7 +186,7 @@ def retrieve_song(request, id): else: mark_form = SongMarkForm(initial={ 'song': song, - 'visibility': request.user.preference.default_visibility if request.user.is_authenticated else 0, + 'visibility': request.user.get_preference().default_visibility if request.user.is_authenticated else 0, 'tags': mark_tags }) @@ -729,7 +729,7 @@ def retrieve_album(request, id): else: mark_form = AlbumMarkForm(initial={ 'album': album, - 'visibility': request.user.preference.default_visibility if request.user.is_authenticated else 0, + 'visibility': request.user.get_preference().default_visibility if request.user.is_authenticated else 0, 'tags': mark_tags }) diff --git a/users/data.py b/users/data.py index 434f58c5..f296ffd7 100644 --- a/users/data.py +++ b/users/data.py @@ -47,12 +47,13 @@ from common.importers.douban import DoubanImporter @mastodon_request_included @login_required def preferences(request): + preference = request.user.get_preference() if request.method == 'POST': - request.user.preference.default_visibility = int(request.POST.get('default_visibility')) - request.user.preference.classic_homepage = bool(request.POST.get('classic_homepage')) - request.user.preference.mastodon_publish_public = bool(request.POST.get('mastodon_publish_public')) - request.user.preference.mastodon_append_tag = request.POST.get('mastodon_append_tag', '').strip() - request.user.preference.save(update_fields=['default_visibility', 'classic_homepage', 'mastodon_publish_public', 'mastodon_append_tag']) + preference.default_visibility = int(request.POST.get('default_visibility')) + preference.classic_homepage = bool(request.POST.get('classic_homepage')) + preference.mastodon_publish_public = bool(request.POST.get('mastodon_publish_public')) + preference.mastodon_append_tag = request.POST.get('mastodon_append_tag', '').strip() + preference.save(update_fields=['default_visibility', 'classic_homepage', 'mastodon_publish_public', 'mastodon_append_tag']) return render(request, 'users/preferences.html') @@ -61,8 +62,8 @@ def preferences(request): def data(request): return render(request, 'users/data.html', { 'latest_task': request.user.user_synctasks.order_by("-id").first(), - 'import_status': request.user.preference.import_status, - 'export_status': request.user.preference.export_status + 'import_status': request.user.get_preference().import_status, + 'export_status': request.user.get_preference().export_status }) diff --git a/users/models.py b/users/models.py index 49203275..18492fe5 100644 --- a/users/models.py +++ b/users/models.py @@ -62,6 +62,12 @@ class User(AbstractUser): def __str__(self): return self.mastodon_username + def get_preference(self): + pref = self.preference + if not pref: + pref = Preference.objects.create(user=self) + return pref + def refresh_mastodon_data(self): """ Try refresh account data from mastodon server, return true if refreshed successfully, note it will not save to db """ self.mastodon_last_refresh = timezone.now() diff --git a/users/views.py b/users/views.py index 4d5c08b2..c606d548 100644 --- a/users/views.py +++ b/users/views.py @@ -176,11 +176,7 @@ def home(request, id): for review in music_reviews: review.type = 'album' if review.__class__ == AlbumReview else 'song' - try: - layout = user.preference.get_serialized_home_layout() - except ObjectDoesNotExist: - Preference.objects.create(user=user) - layout = user.preference.get_serialized_home_layout() + layout = user.get_preference().get_serialized_home_layout() return render( request,