feat: mixin for update forms
This commit is contained in:
+31
-25
@@ -1,9 +1,12 @@
|
||||
from decimal import Decimal
|
||||
|
||||
from django.db import models
|
||||
from django.http import HttpResponse
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
from django.urls import reverse
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from config.mixins import HTMXFormComponent
|
||||
from shop.filters import ProductFilter
|
||||
from shop.models import (
|
||||
CartItem,
|
||||
@@ -13,10 +16,10 @@ from shop.models import (
|
||||
ShippingMethod,
|
||||
WishlistedProduct,
|
||||
)
|
||||
from users.forms.change_password import ChangePasswordForm
|
||||
from users.forms.info import UserInfoForm
|
||||
from web.forms import CustomerAddressForm
|
||||
from web.mixins import FilteredQuerysetMixin, PaginatedQuerysetMixin
|
||||
from web.models import WebSettings
|
||||
from web.settings import ANONYMOUS_CART_ID_COOKIE_NAME
|
||||
from web.utils import get_or_create_cart
|
||||
|
||||
@@ -146,37 +149,39 @@ class WishlistButton(TemplateView):
|
||||
}
|
||||
|
||||
|
||||
class UserInfoComponentView(TemplateView):
|
||||
template_name = "components/users/info.html"
|
||||
class UserInfoFormComponentView(HTMXFormComponent):
|
||||
form_class = UserInfoForm
|
||||
hx_trigger = "updated_user_info"
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
web_settings = WebSettings.load()
|
||||
user = self.request.user
|
||||
form = self.form_class(
|
||||
initial={
|
||||
"email": user.email,
|
||||
"first_name": user.first_name,
|
||||
"last_name": user.last_name,
|
||||
}
|
||||
)
|
||||
def get_object(self) -> models.Model:
|
||||
return self.request.user
|
||||
|
||||
def get_view_name(self):
|
||||
return reverse("web:user_info_component")
|
||||
|
||||
def get_initial_values(self, instance):
|
||||
return {
|
||||
"form": form,
|
||||
"email": instance.email,
|
||||
"first_name": instance.first_name,
|
||||
"last_name": instance.last_name,
|
||||
}
|
||||
|
||||
def post(self, request, *args, **kwargs):
|
||||
user = self.request.user
|
||||
form = self.form_class(request.POST)
|
||||
|
||||
if form.is_valid():
|
||||
user.email = form.cleaned_data.get("email")
|
||||
user.first_name = form.cleaned_data.get("first_name")
|
||||
user.last_name = form.cleaned_data.get("last_name")
|
||||
user.save()
|
||||
return HttpResponse(status=200)
|
||||
class ChangePasswordFormComponentView(HTMXFormComponent):
|
||||
form_class = ChangePasswordForm
|
||||
hx_trigger = "changed_password"
|
||||
|
||||
return render(request, self.template_name, {"form": form})
|
||||
def get_form(self, initial=True):
|
||||
if initial:
|
||||
return self.form_class(user=self.request.user)
|
||||
|
||||
return self.form_class(self.request.user, self.request.POST)
|
||||
|
||||
def get_object(self) -> models.Model:
|
||||
return self.request.user
|
||||
|
||||
def get_view_name(self):
|
||||
return reverse("web:change_password_component")
|
||||
|
||||
|
||||
class ListCustomerAddressComponent(TemplateView):
|
||||
@@ -203,5 +208,6 @@ list_products = ListProducts.as_view()
|
||||
list_wishlisted_products = ListWishlistedProducts.as_view()
|
||||
wishlist_button = WishlistButton.as_view()
|
||||
|
||||
user_info_component = UserInfoComponentView.as_view()
|
||||
user_info_component = UserInfoFormComponentView.as_view()
|
||||
change_password_component = ChangePasswordFormComponentView.as_view()
|
||||
list_customer_addresses_component = ListCustomerAddressComponent.as_view()
|
||||
|
||||
Reference in New Issue
Block a user