Сократите избыточный код в форме модели 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
Вернуться на верх