Merge pull request #70 from cyisfor/cohesive_preferences_code

Cohesive preferences code
This commit is contained in:
GCU Prosthetic Conscience 2020-06-01 10:09:55 -04:00 committed by GitHub
commit 62362d8ab6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 28 deletions

View File

@ -28,19 +28,7 @@ class OAuthLoginForm(forms.Form):
class PreferencesForm(forms.ModelForm):
class Meta:
model = Preference
fields = [
"theme",
"filter_replies",
"filter_boosts",
"timezone",
"no_javascript",
"notifications",
"click_to_load",
"lightbox",
"filter_notifications",
"bundle_notifications",
"poll_frequency",
]
fields = Preference._fields
class PostForm(forms.Form):

View File

@ -29,7 +29,20 @@ class Theme(models.Model):
def __str__(self):
return self.name
from django.db.models.fields.related_descriptors import ForeignKeyDeferredAttribute
def set_fields(klass):
fields = []
for n in dir(klass):
assert n != "_fields"
v = getattr(klass, n)
if not hasattr(v, 'field'): continue
if not isinstance(v.field, models.Field): continue
if isinstance(v, ForeignKeyDeferredAttribute): continue
fields.append(n)
setattr(klass, '_fields', fields)
return klass
@set_fields
class Preference(models.Model):
theme = models.ForeignKey(Theme, models.CASCADE, null=False, default=1)
filter_replies = models.BooleanField(default=False)

View File

@ -767,21 +767,10 @@ def settings(request):
if request.method == "POST":
form = PreferencesForm(request.POST)
if form.is_valid():
account.preferences.theme = form.cleaned_data["theme"]
account.preferences.filter_replies = form.cleaned_data["filter_replies"]
account.preferences.filter_boosts = form.cleaned_data["filter_boosts"]
account.preferences.timezone = form.cleaned_data["timezone"]
account.preferences.no_javascript = form.cleaned_data["no_javascript"]
account.preferences.notifications = form.cleaned_data["notifications"]
account.preferences.click_to_load = form.cleaned_data["click_to_load"]
account.preferences.lightbox = form.cleaned_data["lightbox"]
account.preferences.filter_notifications = form.cleaned_data[
"filter_notifications"
]
account.preferences.bundle_notifications = form.cleaned_data[
"bundle_notifications"
]
account.preferences.poll_frequency = form.cleaned_data["poll_frequency"]
for field in account.preferences._fields:
if field in form.cleaned_data:
setattr(account.preferences, field,
form.cleaned_data[field])
request.session["timezone"] = account.preferences.timezone
account.preferences.save()
account.save()