Explorar el Código

[profiles] Actually make the form work

Colin Powell hace 2 meses
padre
commit
71874510a4

+ 16 - 0
vrobbler/apps/profiles/forms.py

@@ -4,6 +4,17 @@ from profiles.models import UserProfile
 
 
 class UserProfileForm(forms.ModelForm):
+    def __init__(self, *args, **kwargs):
+        self.request = kwargs.pop("request")
+        self.profile = UserProfile.objects.filter(
+            user=self.request.user
+        ).first()
+        if not self.profile:
+            raise Exception
+        super(UserProfileForm, self).__init__(
+            *args, **kwargs, instance=self.profile
+        )
+
     class Meta:
         model = UserProfile
         fields = [
@@ -26,3 +37,8 @@ class UserProfileForm(forms.ModelForm):
             "ntfy_enabled",
             "redirect_to_webpage",
         ]
+        widgets = {
+            "lastfm_password": forms.PasswordInput(render_value=True),
+            "archivebox_password": forms.PasswordInput(render_value=True),
+            "webdav_pass": forms.PasswordInput(render_value=True),
+        }

+ 1 - 1
vrobbler/apps/profiles/urls.py

@@ -6,6 +6,6 @@ app_name = "profiles"
 
 urlpatterns = [
     path(
-        "settings/", views.ProfileDetailView.as_view(), name="profile_settings"
+        "settings/", views.ProfileFormView.as_view(), name="profile_settings"
     ),
 ]

+ 13 - 6
vrobbler/apps/profiles/views.py

@@ -5,13 +5,20 @@ from django.views.generic import FormView
 from profiles.forms import UserProfileForm
 
 
-class ProfileDetailView(FormView):
+class ProfileFormView(FormView):
     form_class = UserProfileForm
     template_name = "profiles/settings_form.html"
     success_url = reverse_lazy("profiles:profile_settings")
 
-    def get_context_data(self, **kwargs):
-        context_data = super().get_context_data(**kwargs)
-        if self.request.user.is_anonymous:
-            return HttpResponseBadRequest
-        return context_data
+    def get_form_kwargs(self):
+        """Passes the request object to the form class.
+        This is necessary to only display members that belong to a given user"""
+
+        kwargs = super(ProfileFormView, self).get_form_kwargs()
+        kwargs["request"] = self.request
+
+        return kwargs
+
+    def form_valid(self, form):
+        form.save()
+        return super(ProfileFormView, self).form_valid(form)

+ 3 - 4
vrobbler/templates/profiles/settings_form.html

@@ -46,9 +46,8 @@ input:focus {
 
 {% block title %}Settings{% endblock %}
 {% block details %}
-<form action="." method="post">
-{% csrf_token %}
-{{form.as_p}}
-<input type="submit" value="Save">
+<form method="post">{% csrf_token %}
+    {{form.as_p}}
+    <input type="submit" value="Save">
 </form>
 {% endblock %}