Это немного повторения предыдущего вопроса, который я задавал. Тем не менее, я считаю, что я внес достаточно существенные изменения в код, чтобы не задавать новый вопрос при получении нового сообщения об ошибке.
Это мой код в views.py (teacher.py):
# edit mentor profile
def edit_user(request):
user = request.user
# form = MentorProfileForm(instance=user)
if request.method == 'POST':
form = UserForm(request.POST, instance=user)
mentorform = MentorProfileForm(request.POST, request.FILES, instance=user)
if form.is_valid() and mentorform.is_valid():
form.save()
mentorform.save()
messages.success(request, ('Your profile was successfully updated!'))
return HttpResponseRedirect('%s' % (reverse('profile')))
else:
messages.error(request, ('Please correct the error below.'))
else:
form = UserForm(request.POST, instance=user)
mentorform = MentorProfileForm(request.POST, request.FILES, instance=user)
return render(request, 'classroom/teachers/app-instructor-profile.html', {'form': form,
'mentor_form': mentorform})
forms.py
#basic form
class UserForm(forms.ModelForm):
class Meta:
model = User
fields = ('first_name','last_name','email')
# edit mentor profile
class MentorProfileForm(forms.ModelForm):
class Meta:
model = Mentor
fields = ('photo',)
models.py:
class User(AbstractUser):
is_student = models.BooleanField(default=False)
is_teacher = models.BooleanField(default=False)
...
class Mentor(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True)
linkedin = models.URLField(max_length=200,null=True,blank=True)
photo = models.ImageField(null=True,blank=True,upload_to='media')
def __str__(self):
return "Profile of user {}".format(self.user.username)
@receiver(post_save,sender=User)
def create_or_update(sender, instance,created, **kwargs):
if created:
post_save.connect(create_or_update, sender=User)
форма html:
<form id="edit-mentor-profile" class="form-horizontal" method="post" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<label for="photo" class="col-sm-2 control-label">Avatar</label>
<div class="col-md-6">
<div class="media v-middle">
<div class="media-left">
<div class="icon-block width-100 bg-grey-100">
<img id="image" style="width:99%;height:99%;">
</div>
</div>
<div class="media-body">
<input type="file" id="files" class="btn btn-white btn-sm paper-shadow relative" data-z="0.5" data-hover-z="1" data-animated/>
...
и это где изображение должно появиться
<img src="{{ mentorform.photo}}" alt="people" class="img-circle width-80" />
urls.py:
path('teachers/', include(([
path('', teachers.QuizListView.as_view(), name='app-instructor-dashboard'),
path('logout', teachers.logout_request, name="logout"),
path('edit_user', teachers.edit_user, name='edit_user'),
], 'classroom'), namespace='teachers'))
...
#user profile image
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Здесь я добавил URL-адрес мультимедиа в settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'templates')
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
...
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Примечание. Я редактировал Httpredirect для перенаправления для редактирования пользователя, но все еще не может обновить изображение профиля
return HttpResponseRedirect('%s' % (reverse('teachers:edit_user')))
UPDATE
Я попытался внести некоторые изменения в urls.py - возможно, мой медиа файлы не обслуживаются, если я не проверяю их на предмет отладки, но это ничего не изменило, не обновляя изображение профиля пользователя.
Я также заметил, когда я запускаю проверку, где изображение должно появиться в Интернете страница я получаю это
<img src=(unknown) alt="people" class="img-circle width-80">
Я заметил, что я не создал папку мультимедиа, поэтому я создал вручную Он все еще не обновляет мою фотографию. Может быть проблема в том, что я вызываю картинку в html?