比较视图 Django 中表单的值



View.py

类寄存器(模板视图(:

template_name = 'registration.html'
def get(self, request, *args, **kwargs):
form = CreateForm()
return render(request, self.template_name, {'form': form})
@staticmethod
def post(request):
try:
data = request.POST.get
user = User(
first_name=data('first_name'),
last_name=data('last_name'),
username=data('username').strip(),
email=data('email'),
)
user.set_password(data('password').strip())
user.save()
request.session["user_id"] = user.id
return HttpResponse(' Save successfully ')
except Exception as c:
return HttpResponse("Failed :  {}".format(c), 500)

Form.py

role_choice=(("客户","客户"(,("员工","员工"((

类创建表单(表单。形式(:

first_name = forms.CharField(label="Enter Your First Name", max_length=30, required=True)
last_name = forms.CharField(label="Enter Your Last Name", max_length=30, required=True)
username = forms.CharField(required=True, widget=forms.TextInput())
email = forms.CharField(required=True, widget=forms.TextInput())
password = forms.CharField(required=True, widget=forms.PasswordInput())
role = forms.ChoiceField(choices=role_choice, widget=forms.RadioSelect())

类客户(表单。形式(:

contact = forms.IntegerField(label="Enter your contact number", required=True, )
amount = forms.IntegerField(required=True, min_value=500)
type = forms.ChoiceField(choices=choice)

Model.py

类客户(型号。型号(:

user = models.ForeignKey(User, on_delete=models.CASCADE)
contact = models.BigIntegerField()
amount = models.BigIntegerField()
type = models.CharField(max_length=1)

模板

{% 扩展 "home.html" %}

{% 负载 crispy_forms_tags %}

{% 块标题 %}创建帐户{% 结束块 %}

{% 块内容 %}

<div>

{% csrf_token %}
{{ form|crispy }}
<button type="submit">Submit</button><br>

</div>

{% 端块 %}

注册后,当用户选择客户选项时,汇总表格后我转到客户页面,如果用户选择员工选项,他/她会转到员工页面,但我不知道该怎么做

首先,我强烈建议不要自己写所有的观点等。Django已经有很多工具了。它有一个UserCreationForm[Django-doc],可以稍微修改。例如:

# app/forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm
class RoleUserCreationForm(UserCreationForm):
ROLES = (
('Customer', 'Customer'),
('Employee', 'Employee')
)
role= forms.ChoiceField(choices=ROLES, widget=forms.RadioSelect())
class Meta(UserCreationForm.Meta):
fields = (*UserCreationForm.Meta.fields, 'first_name', 'last_name')

因此,我们也可以在这里添加用于first_namelast_name的额外字段。

现在我们可以在CreateView[Django-doc] 中使用它,并覆盖form_valid(..)方法 [Django-doc]:

# app/views.py
from app.forms importRoleUserCreationForm
from django.contrib.auth import get_user_model
from django.shortcuts import redirect
from django.views.generic.edit import CreateView
class RegisterView(CreateView):
model = get_user_model()
form_class = RoleUserCreationForm
def form_valid(self, form):
request.session['user_id'] = self.object.id
if form.cleaned_data['role'] == 'Customer':
return redirect('name-of-customer-view')
else:
return redirect('name-of-employee-view')

'name-of-customer-view''name-of-employee-view'分别替换为这些视图的名称。

最新更新