В настоящее время у меня есть два стиля шаблонов: Пользователь + Клиент и Пользователь + Компания.И я хочу создать представление для создания учетной записи User + из любого из этих двух связанных шаблонов.
В настоящее время я достиг этого, но есть проблема: код кажется очень раздутым, и я такжене знаю, есть ли CBV для редактирования модели со связанными моделями, тогда это приведет к тому, что другие виды также будут раздутыми.
Есть ли способ улучшить это?
models.py: https://pastebin.com/9Fp0F6CG
my views.py:
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from django.views import generic
from .forms import UserForm, ClientForm, CompanyForm
class ClientFormView(generic.View):
def get(self, request, *args, **kwargs):
template_name = "users/registration/form_client.html"
context = {"form_user": UserForm, "form_client": ClientForm}
return render(request, template_name, context)
def post(self, request, *args, **kwargs):
template_name = "users/registration/form_client.html"
context = {"form_user": UserForm, "form_client": ClientForm}
form_user = UserForm(request.POST)
form_client = ClientForm(request.POST)
if form_user.is_valid() and form_client.is_valid():
# get data for auth and login
email = form_user.cleaned_data["email"]
password_raw = form_user.cleaned_data["password1"]
# add user_type = client
instance_user = form_user.save(commit=False)
instance_user.user_type = "cl"
instance_user.save()
instance_client = form_client.save(commit=False)
user = authenticate(email=email, password=password_raw)
if user is not None:
# add the user in related user field
instance_client.user = user
instance_client.save()
login(request, user)
return redirect("main:home")
return render(request, template_name, context)
class CompanyFormView(generic.View):
def get(self, request, *args, **kwargs):
template_name = "users/registration/form_company.html"
context = {"form_user": UserForm, "form_company": CompanyForm}
return render(request, template_name, context)
def post(self, request, *args, **kwargs):
template_name = "users/registration/form_company.html"
context = {"form_user": UserForm, "form_company": CompanyForm}
form_user = UserForm(request.POST)
form_company = CompanyForm(request.POST)
if form_user.is_valid() and form_company.is_valid():
# get data for auth and login
email = form_user.cleaned_data["email"]
password_raw = form_user.cleaned_data["password1"]
# add user_type = client
instance_user = form_user.save(commit=False)
instance_user.user_type = "comp"
instance_user.save()
instance_company = form_company.save(commit=False)
user = authenticate(email=email, password=password_raw)
if user is not None:
# add the user in related user field
instance_company.user = user
instance_company.save()
login(request, user)
return redirect("main:home")
return render(request, template_name, context)