如果对用户进行身份验证,则尝试加载某种形式,并使用用户凭据预加载数据库中的所有信息

问题描述 投票:0回答:1

如果用户通过了身份验证,则尝试加载某种表单并预加载数据库中的所有信息,但我收到此错误,这很可能是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有问题,但想法是,如果...

python django forms user-input
1个回答
0
投票
尝试将所需的用户信息直接显示在视图中,而不是形式:
© www.soinside.com 2019 - 2024. All rights reserved.