首页 > 解决方案 > 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()”

标签: pythondjangodjango-modelsdjango-formsdjango-views

解决方案


尝试反转 models.py 中的模型:

首先声明 User 模型类 然后是 Text 模型类


推荐阅读