python - django文本表单视图错误'用户'在分配之前引用
问题描述
我有这个视图,其中有 3 个表单用于登录,一个用于注册,另一个用于将文本作为帖子发布,该文本保存到数据库中
这是我的views.py文件
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate, logout as django_logout
from django.contrib import messages
from django.urls import reverse
from .models import *
from .forms import *
def home(request):
user = request.user
# for rendering texts
text_form = TextForm()
signin_form = SigninForm()
signup_form = SignupForm()
if request.method == "POST":
if 'text_form' in request.POST:
text_form = TextForm(request.POST)
if text_form.is_valid() and request.user.is_authenticated:
user = request.user
obj = text_form.save(commit=False)
author = User.objects.filter(email=user.email).first()
obj.author = author
text_form.save()
if 'signin_form' in request.POST:
signin_form = SigninForm(request.POST)
if signin_form.is_valid():
email = request.POST['email']
password = request.POST['password']
user = authenticate(email=email, password=password)
if user:
login(request, user)
elif user is None:
messages.error(request, 'ُEmail or password is incorrect')
if 'signup_form' in request.POST:
signup_form = SignupForm(request.POST)
if signup_form.is_valid():
User = signup_form.save()
full_name = signup_form.cleaned_data.get('full_name')
email = signup_form.cleaned_data.get('email')
raw_password = signup_form.cleaned_data.get('password1')
account = authenticate(email=email, password=raw_password)
login(request, account)
texts = Text.objects.all().order_by('-id')
context = {'signin_form': signin_form,'signup_form': signup_form,'text_form': text_form,'texts': texts}
return render(request, 'main/home.html', context)
在我的models.py
#the text model
class Text(models.Model):
title = models.CharField(max_length=200, null=True)
document = models.TextField(max_length=None, null=True)
requirements = models.TextField(max_length=200, null=True)
date_created = models.DateField(auto_now_add=True, null=True)
deadline = models.DateField(null=True)
author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
def __str__(self):
return self.title
# the user model
class User(AbstractBaseUser):
email = models.EmailField(verbose_name="Email",max_length=250, unique=True)
username = models.CharField(max_length=30, unique=True, null=True)
date_joined = models.DateTimeField(verbose_name='Date joined', auto_now_add=True)
last_login = models.DateTimeField(verbose_name='Last login', auto_now=True)
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
full_name = models.CharField(verbose_name="Full name", max_length=150, null=True)
profile_pic = models.ImageField(null=True, blank=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['full_name']
objects = MyAccountManager()
def __str__(self):
return self.full_name
# For checking permissions.
def has_perm(self, perm, obj=None):
return self.is_admin
# For which users are able to view the app (everyone is)
def has_module_perms(self, app_label):
return True
一切正常,但是当我尝试创建帖子时出现错误说
“分配前引用的局部变量‘用户’”
并且错误在views.py的以下行中
“作者 = User.objects.filter(email=user.email).first()”
解决方案
尝试反转 models.py 中的模型:
首先声明 User 模型类 然后是 Text 模型类
推荐阅读
- mysql - 此页面无法正常工作。mydomain.com 响应时间过长。HTTP 错误 504,mysql grails
- xcode - 在 React Native 中为每个方案设置 babel ios bundle build 的环境变量
- c# - Unity 中 set active 和 Input.touch 中的故障
- amazon-web-services - Terraform - 为安全组迭代和创建入口规则
- asp.net-core - 我使用 HttpGet 和 HttpPost 错了吗?ASP.NET C#
- mean-stack - Mac 上的 Bitnami MEAN 堆栈:未知命令表达
- xml - 对安全性 ODOO 13 的分组访问
- python - Pyspark 数据框连接很少有重复的列名,很少有没有重复的列
- java - 为什么 Object 类有方法 wait() 和 notify() 而 Class 类没有?
- visual-studio - Visual Studio 2015 IIS Express 不加载 CSS、JS、图像等资产