Как преобразовать базовое представление функции в универсальный класс на основе двух моделей

#python #django #django-models #django-views #django-forms

Вопрос:

я создаю представление реестра на основе функций, но я хочу использовать универсальный класс для лучшего улучшения своего кода.

это мой models.py

 from django.db import models
from django.contrib.auth.models import User


class UserRegister(models.Model):
    reg_user = models.OneToOneField(User, on_delete=models.CASCADE, verbose_name='user')
    mobile = models.CharField(max_length=255, verbose_name='mobile phone number : ', unique=True)
    name = models.CharField(max_length=255, verbose_name='First Name : ')
    family = models.CharField(max_length=255, verbose_name='Last Name : ')

    def __str__(self):
        return f"{self.mobile} as {self.name}"

 

тогда мой forms.py

 from django import forms
from django.contrib.auth.forms import UserCreationForm
from .models import *


class RegisterForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['username', 'first_name', 'email', 'password1', 'password2']


class UserForm(forms.ModelForm):
    class Meta:
        model = UserRegister
        fields = '__all__'
 

потом я позвал их обоих views.py вот так

 from django.shortcuts import render, redirect
from django.views.generic import *
from .forms import *


def register(request):
    r_form = RegisterForm()
    u_form = UserForm()
    if request.method == 'POST':
        r_form = RegisterForm(request.POST)
        u_form = UserForm(request.POST)
        if r_form.is_valid() and u_form.is_valid():
            user = r_form.save()
            u_form = u_form.save(commit=False)
            u_form.user = user
            u_form.save()
            return redirect('main')
        else:
            r_form = RegisterForm(request.POST)
            u_form = UserForm(request.POST)

    context = {
        'r_form': r_form,
        'u_form': u_form
    }
    return render(request, 'template.html', context)


 

пример универсального класса на основе, который, как я знаю, хранится только в 1 моделях, таких как

 class CreateUserView(CreateView):
    model = User
    form_class = UserForm
    template_name = 'template.html'
    
    def get_success_url(self):
        return redirect('main')
 

кто — нибудь может помочь мне улучшить мой код, пожалуйста?