【问题标题】:AttributeError at /profile/create 'ProfileCreate' object has no attribute 'errors'/profile/create \'ProfileCreate\' 对象的 AttributeError 没有属性 \'errors\'
【发布时间】:2022-10-05 19:06:05
【问题描述】:

我正在处理一个社交媒体项目,并在创建任何个人资料时遇到此错误。请帮我解决这个问题。下面是提到的代码。

视图.py

from multiprocessing import context
from pickle import FALSE
from django.shortcuts import render,redirect
from django.views import View
from .form import CreateUserForm, ProfileForm
from .models import CustomUser, Profile
from django.contrib import messages
from django.contrib.auth import login,logout,authenticate
from django.contrib.auth.decorators import login_required
from django.views.generic.edit import CreateView, UpdateView
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView

# Create your views here.
def index(request):
    context = {}
    return render(request,\'index.html\',context)

def registration(request):    
    userform = CreateUserForm(request.POST)

    if request.method==\'POST\':
        
        if userform.is_valid():
            userform.save(commit=\'FALSE\')
        else:
            messages.error(request,\'An Error Occured!!\')

    Users = CustomUser.objects.all()

    context = {\'User\': Users, \'form\': CreateUserForm }

    return render (request,\'registration.html\',context)
    
def log_in(request):

    if request.method == \'POST\':
        username = request.POST.get(\'username\')
        password = request.POST.get(\'password\')

        user = authenticate(request,username=username,password=password) 

        if user is not None:
            login(request, user)
            return redirect(\'home\')
        else:
            messages.info(request,\'Username or Password is incorrect\')
        
    context = {}
    return render(request,\'login.html\',context) 

@login_required
def log_out(request):
    logout(request)
    messages.info(request, \"Logged out successfully!\")
    return redirect(\'index\')


@login_required
def home(request):

    return render(request,\'home.html\')

class ProfileCreate(CreateView):

    def get_queryset(self):
        return Profile.objects.all()

    fields = [
        \'image\',
        \'first_name\',
        \'last_name\'
    ]

    template_name = \'profile.html\'
    
    success_url = \"/home\"
    
    def form_valid(self, form):
        print(form.cleaned_data)
        ProfileForm.save(self)
        return super().form_valid(ProfileForm)

class ProfileDetailView(DetailView):

    model = Profile
    template_name = \"profileview.html\"


模型.py

from datetime import datetime
from distutils.command.upload import upload
from email.policy import default
from urllib import request
from django.apps import apps
from django.db import models
from django.contrib.auth.models import AbstractUser,BaseUserManager
from django.contrib.auth.hashers import make_password
from django.contrib.auth import get_user_model


# Create your models here.

class UserManager(BaseUserManager):
    use_in_migrations = True

    def _create_user(self, username, date_of_birth, email, password, **extra_fields):
        \"\"\"
        Create and save a user with the given username, email, and password.
        \"\"\"
        if not username:
            raise ValueError(\'The given username must be set\')
        email = self.normalize_email(email)
        # Lookup the real model class from the global app registry so this
        # manager method can be used in migrations. This is fine because
        # managers are by definition working on the real model.
        GlobalUserModel = apps.get_model(self.model._meta.app_label, self.model._meta.object_name)
        username = GlobalUserModel.normalize_username(username)
        user = self.model(username=username, date_of_birth=date_of_birth, email=email, **extra_fields)
        user.password = make_password(password)
        user.save(using=self._db)
        return user

    # def create_user(self, username, email=None, password=None, **extra_fields):
    #     extra_fields.setdefault(\'is_staff\', False)
    #     extra_fields.setdefault(\'is_superuser\', False)
    #     return self._create_user(username, email, password, **extra_fields)

    def create_superuser(self, username, email=None, password=None, **extra_fields):
        extra_fields.setdefault(\'is_staff\', True)
        extra_fields.setdefault(\'is_superuser\', True)

        if extra_fields.get(\'is_staff\') is not True:
            raise ValueError(\'Superuser must have is_staff=True.\')
        if extra_fields.get(\'is_superuser\') is not True:
            raise ValueError(\'Superuser must have is_superuser=True.\')

        return self._create_user(username, email, password, **extra_fields)

class CustomUser(AbstractUser):
    email = models.EmailField((\'email address\'),unique= \'TRUE\')
    date_of_birth = models.DateField(default=datetime.now)

    REQUIRED_FIELDS = [\'email\']

    objects = UserManager()
    
class Profile(models.Model):
    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE)
    image = models.ImageField(upload_to = \'images\')
    first_name = models.TextField(max_length=100)
    last_name = models.TextField(max_length=100)
    
    def __str__(self):
        return self.user.username 

profile.html

<html lang=\"en\">
<head>
    <meta charset=\"UTF-8\">
    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">
    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">
    <title>Profile</title>
</head>
<body>
    <h1>Create your Profile First</h1>
    <form method=\"POST\" action=\"\" enctype=\"multipart/form-data\">

        {% csrf_token %}
        {{ form }}

        <input type=\"submit\" name=\"submit\" id=\"submit\">
    </form>

    <a href=\"{% url \'logout\' %}\">Log Out</a>
</body>
</html>

它显示属性错误,其中说 ProfileCreate 对象没有属性 \'errors\'。 但我无法找到我提到错误的位置以及如何删除此错误。

这是它的追溯

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/profile/create

Django Version: 3.1.5
Python Version: 3.8.5
Installed Applications:
[\'accounts\',
 \'django.contrib.admin\',
 \'django.contrib.auth\',
 \'django.contrib.contenttypes\',
 \'django.contrib.sessions\',
 \'django.contrib.messages\',
 \'django.contrib.staticfiles\']
Installed Middleware:
[\'django.middleware.security.SecurityMiddleware\',
 \'django.contrib.sessions.middleware.SessionMiddleware\',
 \'django.middleware.common.CommonMiddleware\',
 \'django.middleware.csrf.CsrfViewMiddleware\',
 \'django.contrib.auth.middleware.AuthenticationMiddleware\',
 \'django.contrib.messages.middleware.MessageMiddleware\',
 \'django.middleware.clickjacking.XFrameOptionsMiddleware\']



Traceback (most recent call last):
  File \"C:\\Users\\shree\\AppData\\Local\\Programs\\Python\\Python38-32\\lib\\site-packages\\django\\core\\handlers\\exception.py\", line 47, in inner
    response = get_response(request)
  File \"C:\\Users\\shree\\AppData\\Local\\Programs\\Python\\Python38-32\\lib\\site-packages\\django\\core\\handlers\\base.py\", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File \"C:\\Users\\shree\\AppData\\Local\\Programs\\Python\\Python38-32\\lib\\site-packages\\django\\views\\generic\\base.py\", line 70, in view
    return self.dispatch(request, *args, **kwargs)
  File \"C:\\Users\\shree\\AppData\\Local\\Programs\\Python\\Python38-32\\lib\\site-packages\\django\\views\\generic\\base.py\", line 98, in dispatch
    return handler(request, *args, **kwargs)
  File \"C:\\Users\\shree\\AppData\\Local\\Programs\\Python\\Python38-32\\lib\\site-packages\\django\\views\\generic\\edit.py\", line 172, in post
    return super().post(request, *args, **kwargs)
  File \"C:\\Users\\shree\\AppData\\Local\\Programs\\Python\\Python38-32\\lib\\site-packages\\django\\views\\generic\\edit.py\", line 142, in post
    return self.form_valid(form)
  File \"C:\\Users\\shree\\django\\new\\accounts\\views.py\", line 81, in form_valid
    ProfileForm.save(self)
  File \"C:\\Users\\shree\\AppData\\Local\\Programs\\Python\\Python38-32\\lib\\site-packages\\django\\forms\\models.py\", line 451, in save
    if self.errors:

Exception Type: AttributeError at /profile/create
Exception Value: \'ProfileCreate\' object has no attribute \'errors\'

  • 提供完整的追溯
  • 完成@AnkitTiwari
  • 您是否有用于创建个人资料的表格...?如果是,请分享给我以帮助您!

标签: python django django-views django-class-based-views django-errors


【解决方案1】:

你必须在里面传递你的表格邮政像这样的方法

def registration(request):    
    userform = CreateUserForm()

    if request.method=='POST':
       userform = CreateUserForm(request.POST)
       if userform.is_valid():
          userform.save(commit='FALSE')
       else:
          messages.error(request,'An Error Occured!!')

    Users = CustomUser.objects.all()

    context = {'User': Users, 'form': CreateUserForm }

    return render (request,'registration.html',context)

【讨论】:

  • 但我正在使用基于类的视图。所以,相应地指导我
  • 你好@ParvinderMainn 检查我已经编辑了我的答案
猜你喜欢
  • 2021-12-07
  • 2023-01-04
  • 2012-12-01
  • 2021-04-19
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
相关资源
最近更新 更多