diff --git a/brutaldon/forms.py b/brutaldon/forms.py index 84db4cd..d348d5f 100644 --- a/brutaldon/forms.py +++ b/brutaldon/forms.py @@ -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): diff --git a/brutaldon/models.py b/brutaldon/models.py index 4a64cf7..33847a1 100644 --- a/brutaldon/models.py +++ b/brutaldon/models.py @@ -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) diff --git a/brutaldon/views.py b/brutaldon/views.py index 698da19..3beff74 100644 --- a/brutaldon/views.py +++ b/brutaldon/views.py @@ -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()