Доброго времени суток, на днях столкнулся с такой проблемой: изображения
перестали передаваться через формы. У меня два приложения, которые используют ImageField - CustomUser и UserGroup, оба - расширения уже существующих моделей Django(см. код ниже).
Как только заметил проблему, решил откатить до того момента, когда всё работало(в этой версии у меня только модель CustomUser), но... и здесь они перестали передаваться, хотя всё должно работать. Создал новое окружение, не помогло. Поискал в интернете - добавил в форму атрибут
enctype="multipart/form-data"
(раньше и без него всё отлично работало). Вроде заработало, однако, как по мне, это так себе решение.
Прошу совета у знающих людей.
# models.py
from django.db import models
from django.urls import reverse
from django.contrib.auth.models import AbstractUser
class CustomUser(AbstractUser):
photo = models.ImageField(upload_to='profile_pics/', defaul='default.jpg')
def __str__(self):
return self.username
def get_absolute_url(self):
return reverse('users:users-single', kwargs={'username':self.username})
# =============================================
# forms.py
from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from django.contrib.auth import get_user_model
User = get_user_model()
class CustomUserCreationForm(UserCreationForm):
class Meta:
model = User
fields = (
'username',
'email',
'first_name',
'last_name',
'photo')
class CustomUserChangeForm(UserChangeForm):
password = None
class Meta:
model = User
fields = ('photo',)
# =============================================
# views.py
class UserRegisterView(CreateView):
form_class = CustomUserCreationForm
template_name = 'users/register.html'
success_url = 'users/login/'
def form_valid(self, form):
if self.request.recaptcha_is_valid:
form.save()
return super().form_valid(form)
class UserUpdateView(UserPassesTestMixin, LoginRequiredMixin, UpdateView):
fields = ['email', 'first_name', 'last_name', 'photo']
template_name = 'users/update.html'
def get_success_url(self):
username_ = self.request.user.username
return reverse_lazy('users:users-single', kwargs={'username':username_})
def get_object(self):
username_ = self.kwargs.get('username')
return get_object_or_404(CustomUser, username=username_)
def test_func(self):
post = self.get_object()
if self.request.user.username == self.kwargs.get('username'):
return True
return False
# =============================================
# urls.py
urlpatterns =[
...
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT).
# =============================================
# settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')