如果用户通过了身份验证,则尝试加载某种表单并预加载数据库中的所有信息,但我收到此错误,这很可能是forms.py中出现了问题,但是这种想法是,如果用户通过了身份验证,则他们不应通过在输入姓名和电子邮件的过程中,他们只需要发送邮件即可。当前,对于非注册用户来说,它像是一种魅力,但是我以前从未对注册用户做过这样的事情,所以我被困住了。
forms.py
from django import forms from django.forms import ModelForm from .models import Message class NonAuthMessage(forms.ModelForm): class Meta: model = Message fields = "__all__" class AuthMessage(forms.ModelForm): def __init__(self): self.name = user.request.username self.email = user.request.email class Meta: model = Message fields = ["message"]
models.py
from django.db import models from django.utils import timezone class Message(models.Model): name = models.CharField(max_length=50) email = models.EmailField() message = models.TextField(max_length=3000) date_posted = models.DateTimeField(auto_now_add=True) def __str__(self): return self.email class Meta: ordering = ['-date_posted',]
views.py
from django.shortcuts import render, redirect from .models import Message from .forms import NonAuthMessage, AuthMessage def contact(request): formAuth = AuthMessage() formNonAuth = NonAuthMessage() mess = Message.objects.all() if request.user.is_authenticated: if request.method == "POST": form = AuthMessage(request.POST) if form.is_valid(): form.save() return redirect('contact') messages.success(request, 'Message sent to Alex!') else: if request.method =="POST": form = NonAuthMessage(request.POST) if form.is_valid(): form.save() return redirect('contact') messages.success(request, 'Message sent to Alex!') context = {'formAuth': formAuth, 'formNonAuth': formNonAuth, 'mess': mess} return render(request, 'contact/contact.html', context)
contact.html
{% extends 'personal/base.html' %} {% load crispy_forms_tags %} {% block content %} {% if user.is_authenticated %} <form method="POST"> {% csrf_token %} <fieldset class="form-group"> <legend class="border-bottom mb-4">Contact Alex</legend> {{formAuth | crispy}} <br> <div class="form-group"> <button class="btn btn-outline-info" type="submit">Send</button> </div> </fieldset> </form> {% else %} <form method="POST"> {% csrf_token %} <fieldset class="form-group"> <legend class="border-bottom mb-4">Contact Alex</legend> {{formNonAuth | crispy}} <br> <div class="form-group"> <button class="btn btn-outline-info" type="submit">Send</button> </div> </fieldset> </form> {% endif %} <!-- TESTING --> {% for message in mess %} <div class="col-md-4"> <h3 >{{message.email}}</h3> {{message.date_posted}}<hr> <p> {{message.message|truncatewords:"25"}} </p> </div> {% endfor %} {% endblock content %}
我收到的错误消息是:
/ contact /处的NameError;名称“用户”未定义
Traceback:
views.py:formAuth = AuthMessage()
forms.py:
self.name = user.request.username
[如果用户通过了身份验证,则尝试加载某种表单并预加载数据库中的所有信息,但是我收到此错误,很可能是forms.py有问题,但想法是,如果...