保存化身时发生Django错误:应为str、bytes或os.PathLike对象,而不是NoneType
清理的_数据['avatar'](在forms.py中)有错误:应为str、bytes或os.PathLike对象,而不是NoneType 当我使用头像的图像登录时,会出现此错误 我正在使用Django allauth,但不习惯。。。。因此,我添加了一个头像字段,它出现在表单中的sign_中,但我在提交时发现了错误 这是我的代码:models.py保存化身时发生Django错误:应为str、bytes或os.PathLike对象,而不是NoneType,django,django-allauth,avatar,Django,Django Allauth,Avatar,清理的_数据['avatar'](在forms.py中)有错误:应为str、bytes或os.PathLike对象,而不是NoneType 当我使用头像的图像登录时,会出现此错误 我正在使用Django allauth,但不习惯。。。。因此,我添加了一个头像字段,它出现在表单中的sign_中,但我在提交时发现了错误 这是我的代码:models.py from django.db import models from django.contrib.auth.models import Abstra
from django.db import models
from django.contrib.auth.models import AbstractUser
def get_path_name(instance, filename):
path = 'media/avatar/'
name = instance.user.id + "-" + instance.user.email
path = path + name
return path
# custom User model
class CustomUser(AbstractUser):
avatar = models.ImageField(upload_to= get_path_name, blank=True, null=True)
我的表格:
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.core.files.images import get_image_dimensions
from django import forms
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = get_user_model()
fields = ('email', 'username', 'avatar')
def clean_avatar(self):
avatar = self.cleaned_data['avatar']
try:
w, h = get_image_dimensions(avatar)
# validate dimensions
max_width = max_height = 100
if w > max_width or h > max_height:
raise forms.ValidationError(
u'Please use an image that is '
'%s x %s pixels or smaller.' % (max_width, max_height))
# validate content type
main, sub = avatar.content_type.split('/')
if not (main == 'image' and sub in ['jpeg', 'pjpeg', 'gif', 'png']):
raise forms.ValidationError(u'Please use a JPEG, '
'GIF or PNG image.')
# validate file size
if len(avatar) > (20 * 1024):
raise forms.ValidationError(
u'Avatar file size may not exceed 20k.')
except AttributeError:
"""
Handles case when we are updating the user profile
and do not supply a new avatar
"""
pass
return avatar
class CustomUserChangeForm(UserChangeForm):
class Meta:
model = get_user_model()
fields = ('email', 'username', 'avatar')
我的模板:
{% extends '_base.html' %}
{% load crispy_forms_tags %}
{% block title %}
{% endblock title %}
{% block content %}
<h2>Sign Up</h2>
<form method="post">
{% csrf_token %}
{{ form|crispy }}
<button class="btn btn-success" type="submit">Sign Up</button>
</form>
{% endblock content %}
我已经检查了迁移是否按照我在数据库中看到的字段工作。但当然,空du会导致以前的错误
我还有一个问题是,头像字段没有出现在/admin/change/user中,但我将该字段放在CustomUserChangeForm(UserChangeForm)中:
这是我的admin.py:
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth import get_user_model
from .forms import CustomUserCreationForm, CustomUserChangeForm
CustomUser = get_user_model()
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
form = CustomUserChangeForm
model = CustomUser
list_display = ['email', 'username', 'avatar']
admin.site.register(CustomUser, CustomUserAdmin)
错误回溯:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/accounts/signup/
Django Version: 3.1.2
Python Version: 3.7.7
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bootstrap4',
'crispy_forms',
'allauth',
'allauth.account',
'django.contrib.sites',
'accounts',
'home']
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 "/Users/hima/venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/hima/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/django/utils/decorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/django/views/decorators/debug.py", line 89, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/allauth/account/views.py", line 215, in dispatch
return super(SignupView, self).dispatch(request, *args, **kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/allauth/account/views.py", line 81, in dispatch
**kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/allauth/account/views.py", line 193, in dispatch
**kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/django/views/generic/base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/allauth/account/views.py", line 103, in post
if form.is_valid():
File "/Users//hima/venv/lib/python3.7/site-packages/django/forms/forms.py", line 177, in is_valid
return self.is_bound and not self.errors
File "/Users//hima/venv/lib/python3.7/site-packages/django/forms/forms.py", line 172, in errors
self.full_clean()
File "/Users//hima/venv/lib/python3.7/site-packages/django/forms/forms.py", line 374, in full_clean
self._clean_fields()
File "/Users/hima/venv/lib/python3.7/site-packages/django/forms/forms.py", line 395, in _clean_fields
value = getattr(self, 'clean_%s' % name)()
File "/Users//hima/accounts/forms.py", line 15, in clean_avatar
w, h = get_image_dimensions(avatar)
File "/Users/hima/venv/lib/python3.7/site-packages/django/core/files/images.py", line 47, in get_image_dimensions
file = open(file_or_path, 'rb')
Exception Type: TypeError at /accounts/signup/
Exception Value: expected str, bytes or os.PathLike object, not NoneType
添加您的完整错误跟踪刚刚共享它…看起来像是
self。已清理的_数据['avatar']
正在返回值None
是,但不知道为什么…在self中。数据['avatar']我有一个字符串值是signature.png
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/accounts/signup/
Django Version: 3.1.2
Python Version: 3.7.7
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bootstrap4',
'crispy_forms',
'allauth',
'allauth.account',
'django.contrib.sites',
'accounts',
'home']
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 "/Users/hima/venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/hima/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/django/views/generic/base.py", line 70, in view
return self.dispatch(request, *args, **kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/django/utils/decorators.py", line 43, in _wrapper
return bound_method(*args, **kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/django/views/decorators/debug.py", line 89, in sensitive_post_parameters_wrapper
return view(request, *args, **kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/allauth/account/views.py", line 215, in dispatch
return super(SignupView, self).dispatch(request, *args, **kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/allauth/account/views.py", line 81, in dispatch
**kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/allauth/account/views.py", line 193, in dispatch
**kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/django/views/generic/base.py", line 98, in dispatch
return handler(request, *args, **kwargs)
File "/Users//hima/venv/lib/python3.7/site-packages/allauth/account/views.py", line 103, in post
if form.is_valid():
File "/Users//hima/venv/lib/python3.7/site-packages/django/forms/forms.py", line 177, in is_valid
return self.is_bound and not self.errors
File "/Users//hima/venv/lib/python3.7/site-packages/django/forms/forms.py", line 172, in errors
self.full_clean()
File "/Users//hima/venv/lib/python3.7/site-packages/django/forms/forms.py", line 374, in full_clean
self._clean_fields()
File "/Users/hima/venv/lib/python3.7/site-packages/django/forms/forms.py", line 395, in _clean_fields
value = getattr(self, 'clean_%s' % name)()
File "/Users//hima/accounts/forms.py", line 15, in clean_avatar
w, h = get_image_dimensions(avatar)
File "/Users/hima/venv/lib/python3.7/site-packages/django/core/files/images.py", line 47, in get_image_dimensions
file = open(file_or_path, 'rb')
Exception Type: TypeError at /accounts/signup/
Exception Value: expected str, bytes or os.PathLike object, not NoneType