Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将Django模型基于表单的系统转换为原始的基于HTML的表单系统,以便注册_Python_Html_Django - Fatal编程技术网

Python 将Django模型基于表单的系统转换为原始的基于HTML的表单系统,以便注册

Python 将Django模型基于表单的系统转换为原始的基于HTML的表单系统,以便注册,python,html,django,Python,Html,Django,我有一个基于类的视图系统,用于注册Django,它使用Django的模型表单。但是我需要呈现我的自定义构建HTML表单来代替它 My型号.py: from django.contrib.auth.models import AbstractUser from django.db import models class User(AbstractUser): is_student = models.BooleanField(default=False) is_teacher =

我有一个基于类的视图系统,用于注册
Django
,它使用Django的模型表单。但是我需要呈现我的自定义构建
HTML
表单来代替它

My型号.py

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

class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)

class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    quizzes = models.ManyToManyField(Quiz, through='TakenQuiz')
    interests = models.ManyToManyField(Subject, related_name='interested_students')
class StudentSignUpView(CreateView):
    model = User
    form_class = StudentSignUpForm
    template_name = 'registration/signup_form.html'

    def get_context_data(self, **kwargs):
        kwargs['user_type'] = 'student'
        return super().get_context_data(**kwargs)

    def form_valid(self, form):
        user = form.save()
        login(self.request, user)
        return redirect('students:quiz_list')
class StudentSignUpForm(UserCreationForm):
    interests = forms.ModelMultipleChoiceField(
        queryset=Subject.objects.all(),
        widget=forms.CheckboxSelectMultiple,
        required=True
    )

    class Meta(UserCreationForm.Meta):
        model = User

    @transaction.atomic
    def save(self):
        user = super().save(commit=False)
        user.is_student = True
        user.save()
        student = Student.objects.create(user=user)
        student.interests.add(*self.cleaned_data.get('interests'))
        return user
视图。py

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

class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)

class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    quizzes = models.ManyToManyField(Quiz, through='TakenQuiz')
    interests = models.ManyToManyField(Subject, related_name='interested_students')
class StudentSignUpView(CreateView):
    model = User
    form_class = StudentSignUpForm
    template_name = 'registration/signup_form.html'

    def get_context_data(self, **kwargs):
        kwargs['user_type'] = 'student'
        return super().get_context_data(**kwargs)

    def form_valid(self, form):
        user = form.save()
        login(self.request, user)
        return redirect('students:quiz_list')
class StudentSignUpForm(UserCreationForm):
    interests = forms.ModelMultipleChoiceField(
        queryset=Subject.objects.all(),
        widget=forms.CheckboxSelectMultiple,
        required=True
    )

    class Meta(UserCreationForm.Meta):
        model = User

    @transaction.atomic
    def save(self):
        user = super().save(commit=False)
        user.is_student = True
        user.save()
        student = Student.objects.create(user=user)
        student.interests.add(*self.cleaned_data.get('interests'))
        return user
该系统还有一个form.py,它完成了艰苦的工作并呈现了
Django
模型表单。现在,我需要将这些类型的Django的默认模型表单替换为我的自定义构建
HTML
表单,类似这样的表单。 如何使用以下类型的简单系统,从
views.py
接收数据并创建用户

if request.method == 'POST':
    this_username = request.POST['username']
    this_password = request.POST['password']
    this_otherKindofStuff = request.POST['otherKindofStuff']
    Student_signup = Student.objects.create(name=this_name, password=this_password, otherKindofStuff=this_otherKindofStuff)
    Student_signup.save()
当前表单.py

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

class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)

class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    quizzes = models.ManyToManyField(Quiz, through='TakenQuiz')
    interests = models.ManyToManyField(Subject, related_name='interested_students')
class StudentSignUpView(CreateView):
    model = User
    form_class = StudentSignUpForm
    template_name = 'registration/signup_form.html'

    def get_context_data(self, **kwargs):
        kwargs['user_type'] = 'student'
        return super().get_context_data(**kwargs)

    def form_valid(self, form):
        user = form.save()
        login(self.request, user)
        return redirect('students:quiz_list')
class StudentSignUpForm(UserCreationForm):
    interests = forms.ModelMultipleChoiceField(
        queryset=Subject.objects.all(),
        widget=forms.CheckboxSelectMultiple,
        required=True
    )

    class Meta(UserCreationForm.Meta):
        model = User

    @transaction.atomic
    def save(self):
        user = super().save(commit=False)
        user.is_student = True
        user.save()
        student = Student.objects.create(user=user)
        student.interests.add(*self.cleaned_data.get('interests'))
        return user
我的HTML模板

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

class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)

class Student(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    quizzes = models.ManyToManyField(Quiz, through='TakenQuiz')
    interests = models.ManyToManyField(Subject, related_name='interested_students')
class StudentSignUpView(CreateView):
    model = User
    form_class = StudentSignUpForm
    template_name = 'registration/signup_form.html'

    def get_context_data(self, **kwargs):
        kwargs['user_type'] = 'student'
        return super().get_context_data(**kwargs)

    def form_valid(self, form):
        user = form.save()
        login(self.request, user)
        return redirect('students:quiz_list')
class StudentSignUpForm(UserCreationForm):
    interests = forms.ModelMultipleChoiceField(
        queryset=Subject.objects.all(),
        widget=forms.CheckboxSelectMultiple,
        required=True
    )

    class Meta(UserCreationForm.Meta):
        model = User

    @transaction.atomic
    def save(self):
        user = super().save(commit=False)
        user.is_student = True
        user.save()
        student = Student.objects.create(user=user)
        student.interests.add(*self.cleaned_data.get('interests'))
        return user

电子邮件地址
我们永远不会与其他人共享您的电子邮件。
密码
看看我
提交
根据您的评论:

我只是想建立我的自定义表单与HTML的这份工作

我从中了解到的是,您希望设计自己的HTML表单,并取消Django的默认呈现?但是能够利用Django的形式逻辑

如果是这种情况,您只需将表单数据收集到视图中,即可将自定义字段命名为与
ModelForm
中相同的名称,或者干脆将
form
命名为相同的名称。例如,如果您有如下表单:

来自django导入表单的

类MyForm(forms.Form):
field=forms.CharField()
field2=forms.IntegerField()
如果您已经创建了视图并将
MyForm
实例传递给上下文数据,那么为该表单创建自定义HTML的方法如下:


...
{%csrf_令牌%}
领域
字段1
如果提交了上述表单,则
POST
ed数据将绑定到
MyForm
实例,您可以执行验证等操作,还可以通过访问
MyForm
实例的errors dict或per字段在模板中显示错误

除此之外,您当然可以使用Django表单


另外,你可能有兴趣尝试一下。如果您正在为HTML使用引导,这将是一个极好的补充。

显示当前的
forms.py
和模板codedited。。。。而且这个模板只有一个简单的jinja用于呈现Django的模型表单,所以你要做的是添加自定义样式或类,是吗?你能不能也在HTML模板中显示一个表单的片段?是的,我想要它。HTML模板也是通过一个代码段添加的。在这里,你可以说这个表单中没有自定义样式或类,但我稍后会添加它们。那么你能添加一个预期HTML输出的示例吗?非常感谢,这可能就是我想要的。我可以通过请求从views.py访问数据。POST['field']可能吗?是的。你可以。让我添加一个片段,说明将发布的数据绑定到表单后可以做些什么。