0
所以我已經完成我的register()
表單,這是正常工作。我現在試圖做我的login()
表單,但是字段(username
和password
)沒有顯示出來,因爲我無法在BoxesView()
中將2個值添加到form_class。註冊表單中的form_class已經有了一個值,所以我需要添加另一個值。說實話,我並不完全確定form_class是如何在這裏工作的,或者如果可以添加另一個,所以如果有人能夠解釋這很好。這裏是我的代碼:如何在FormMixin中添加兩個form_class?
views.py
class BoxesView(ListView, FormMixin):
template_name = 'polls.html' # extends base.html
form_class = UserRegistrationForm
def get_context_data(self, **kwargs):
context = super(BoxesView, self).get_context_data()
question_list = Question.objects.all().order_by('-date')
choice = Choice.objects.all()
context['question_list'] = question_list
context['choice'] = choice
q_list = []
returned_list = []
for i in question_list:
q_list.append(i)
for a, b in CATEGORY_CHOICES:
name = resolve(self.request.path_info).url_name
if b == name:
category = a
search = self.request.GET.get('search')
posts = Post.objects.all().filter(category=category).order_by('-date')
if search:
posts = posts.filter(
Q(title__icontains=search) |
Q(content__icontains=search)
)
else:
posts = Post.objects.all().filter(category=category).order_by('-date')
context['posts'] = posts
total = 0
for post in posts:
returned_list.append(post)
total += 1
if total == 4:
total = 0
for i in q_list:
returned_list.append(i)
q_list.remove(i)
break
paginator = Paginator(returned_list, 14)
page = self.request.GET.get('page')
try:
lst = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
lst = paginator.page(1)
except EmptyPage:
# If page is out of range (e.g. 9999), deliver last page of results.
lst = paginator.page(paginator.num_pages)
context['lst'] = lst
return context
def get_queryset(self):
pass
def register(request):
form = UserRegistrationForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
email = form.cleaned_data['email']
user = User.objects.create_user(username=username, password=password, email=email)
user.save()
return redirect('/')
else:
form = UserRegistrationForm()
return redirect('/')
def user_login(request):
form_login = UserLoginForm(request.POST)
if form_login.is_valid():
username = form_login.cleaned_data['username']
password = form_login.cleaned_data['password']
user = authenticate(username=username, password=password)
login(request, user)
else:
form_login = UserLoginForm()
return redirect('/')
forms.py
class UserLoginForm(forms.ModelForm):
username = forms.CharField(max_length=25)
password = forms.CharField(widget=forms.PasswordInput)
class Meta:
model = User
fields = [
'username',
'password'
]
class UserRegistrationForm(forms.ModelForm):
email = forms.EmailField()
username = forms.CharField(max_length=25)
password = forms.CharField(widget=forms.PasswordInput)
confirm_password = forms.CharField(widget=forms.PasswordInput)
class Meta:
model = User
fields = [
'username',
'email',
'password',
'confirm_password',
]
base.html文件
<form method="post" enctype="multipart/form-data" action="{% url 'user_login' %}">{% csrf_token %}
<div class="loginWrapper">
<div class="login">
<div class="loginBox">
{{ form_login.username }}
{{ form_login.password }}
<input type="submit" value="login" style="margin-left: 10px"/>
</div>
</div>
</div>
</form>
<form method="post" enctype="multipart/form-data" action="{% url 'register' %}">{% csrf_token %}
<div class="registerWrapper">
<div class="register">
<div class="registerBox">
{{ form.errors }}
{{ form.username|placeholder:"username" }}
{{ form.email|placeholder:"email" }}
{{ form.password|placeholder:"password" }}
{{ form.confirm_password|placeholder:"confirm password" }}
<input type="submit" value="register" />
</div>
</div>
</div>
</form>