一个视图中的两种形式 Django



我是 django 的初学者,我想在同一个视图中放置两个不同的寄存器。但我也想制作自己的表单,并在动作标签上放置不同的 url。我以一种形式做了,但是当我用第二种形式时,这不起作用。

这是我的models.py

from django.db import models
class userProfile(models.Model):
usermail = models.CharField(max_length=264)
username = models.CharField(max_length=264)
userpass = models.CharField(max_length=264)
class companyProfile(models.Model):
companymail = models.CharField(max_length=264)
companyname = models.CharField(max_length=264)
companypass = models.CharField(max_length=264)

这是我forms.py

from django import forms
from Pruebas_app.models import companyProfile, userProfile
class registerCompany(forms.Form):
companypassconf = forms.CharField()
class Meta():
model = companyProfile
fields = ['companymail','companyname', 'companypass']
labels = {'companymail': '', 'companyname': '', }
widgets = { 'companypass': forms.PasswordInput(),}
class registerUser(forms.Form):
userpassconf = forms.CharField()
class Meta():
model = companyProfile
fields = ['usermail','username', 'userpass']
labels = {'usermail': '', 'username': '', }
widgets = {'userpass': forms.PasswordInput(),}

这是我的template

<form action="{ url 'user_register'}" method="post">
<input type="text" name="username">
<input type="email" name="usermail">
<input type="password" name="userpass">
<input type="password" name="userpassconf">
<input type="submit" value="Register">
</form>
<form action="{ url 'company_register'}" method="post">
<input type="text" name="companyname">
<input type="email" name="companymail">
<input type="password" name="companypass">
<input type="password" name="companypassconf">
<input type="submit" value="Register">
</form>

这是我的views.py

from django.shortcuts import render
from Pruebas import forms
from Pruebas.forms import registerCompany, registerUser
from django.http import HttpResponse
def user_register(request):
form = forms.registerUser()
regd = False
passmatch = True
if request.method == "POST":
form = registerUser(request.POST)
if form.is_valid():
form_data = form.cleaned_data
print (form_data.get("userpass"))
if form_data.get("userpass") == form_data.get("userpassconf"):
passmatch = True
form.save()
regd = True
print("saved")
else:
passmatch = False
else:
print("error")
red = 'Pruebas/register.html'
regd = False
return render(request, 'Pruebas/register.html', {'registered': regd, "matchPass": passmatch})

我尝试将数据从我的表单发送到一个唯一的视图,但我只能从用户注册接收数据。我不知道我做错了什么,也不知道我必须做些什么才能使它发挥作用,请帮忙!

在你的表单中,不要定义元类,而只是像使用userpassconf那样显示字段。您甚至可以将窗体合并到单个窗体中,然后像已经执行的操作一样处理视图中的数据,但创建两个实例。像这样:

if request.method == "POST": 
form = registerUser(request.POST) 
if form.is_valid(): 
form_data = form.cleaned_data
if form_data.get("userpass") == form_data.get("userpassconf"): 
passmatch = True 
new_user = userProfile()
new_user.usermail = form_data.get("usermail")
new_user.username = form_data.get("username")
new_user.save() 

所以基本上你只是创建一个你想要保存到的任何模型的实例,并将表单数据分配给它,然后保存它。并且不要忘记将模型导入视图文件。

最新更新