Django : ValueError at / Атрибут 'avatar' не имеет связанного с ним файла
Django присылает мне следующую ошибку: ValueError at / Атрибут 'avatar' не имеет связанного с ним файла.
введите описание изображения здесь
Сообщение появляется сразу после входа в систему, даже если я загрузил аватар при регистрации фиктивного профиля.
Я даже не могу найти аватар в настроенном пути: media/avatars.
Помогите, пожалуйста, найти, где я ошибся. Ниже приведен мой код.
**models.py: **
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
(some code)
avatar = models.ImageField(upload_to='avatars/',blank=True, null=True)
**forms.py: **
class RegisterForm(UserCreationForm):
(some code)
avatar = forms.ImageField(
required=False,
widget=forms.ClearableFileInput(
attrs={
"class": "form-control"
}
)
)
class Meta:
model = User
fields = ['username','first_name','last_name','email','avatar','password1','password2','user_type']
**settings.py: **
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_DIR = BASE_DIR / 'media'
STATIC_ROOT = BASE_DIR / 'staticfiles'
MEDIA_ROOT = BASE_DIR / 'media'
Я добавил это в urls.py из основного каталога проекта:
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
И, наконец, путь, по которому должны быть загружены аватары:
ГлавныйПроект ├──── медиа │ ├──── аватары
Большое спасибо за любую помощь
Я пытался сделать так, чтобы все загруженные аватары попадали в media/avatars.
Я даже создал условия, при которых на случай, если пользователь не загрузит аватар, есть картинка-заместитель:
{% if user.avatar %}
<img src="{{ user.avatar.url }}">
{% else %}
<img src="{% static 'images/cat.png' %}">
{% endif %}
В static/images/
действительно есть изображение 'cat.png'.Надеюсь, вы не забыли применить makemigration и migrate! У вас есть github-репо этого, я хочу взглянуть на него, прежде чем комментировать.
#settings.py
STATIC_URL = 'static/'
STATIC_ROOT=os.path.join(BASE_DIR,'static’)
MEDIA_ROOT =os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'