Сократите избыточный код в форме модели django
У меня много повторяющегося кода, как я могу изменить его так, чтобы было меньше лишнего кода в моих формах модели. Единственное различие здесь - это тип_пользователя в методе сохранения, который является пользователем admin и пользователем customer. Как я могу сократить и изменить мой код, может кто-нибудь подсказать по этому поводу
class AdminUserCreateModelForm(UserCreationForm):
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
email = forms.EmailField(required=True)
class Meta(UserCreationForm.Meta):
model = User
def clean_email(self):
email = self.cleaned_data.get("email")
if User.objects.filter(email__iexact=email).exists():
self.add_error("email", "A user with this email already exists.")
return email
def clean_username(self):
username = self.cleaned_data.get('username')
if User.objects.filter(username__iexact=username).exists():
raise forms.ValidationError('Username Already Exists')
return username
def save(self):
user = super().save(commit=False)
user.is_admin = True
user.first_name = self.cleaned_data.get('first_name')
user.last_name = self.cleaned_data.get('last_name')
user.email = self.cleaned_data.get('email')
user.save()
admin = User.objects.create(user=user)
admin.phone_number = self.cleaned_data.get('phone')
admin.save()
return user
class CustomerUserCreateModelForm(UserCreationForm):
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
class Meta(UserCreationForm.Meta):
model = User
def clean_email(self):
email = self.cleaned_data.get("email")
if User.objects.filter(email__iexact=email).exists():
self.add_error("email", "A user with this email already exists.")
return email
def clean_username(self):
username = self.cleaned_data.get('username')
if User.objects.filter(username__iexact=username).exists():
raise forms.ValidationError('Username Already Exists')
return username
def save(self):
user = super().save(commit=False)
user.is_customer = True
user.first_name = self.cleaned_data.get('first_name')
user.last_name = self.cleaned_data.get('last_name')
user.email = self.cleaned_data.get('email')
user.save()
customer = User.objects.create(user=user)
customer.phone_number = self.cleaned_data.get('phone')
customer.save()
return user