Я пытаюсь, чтобы мои пользователи обновляли свой профиль из front-end, позволяя ему отражать в админке django, особенно обновление изображения профиля. Изменение user.first_name
и user.last_name
отлично работает, за исключением изображения, которое также не отражается на заднем конце. Я думаю, что я пропускаю что-то плюс, когда поля для firstname и lastname пустые, это сообщение как null. Я думаю, что я использовал бы исключение для этого, но меня больше интересует образ профиля. Пожалуйста, помогите мне, я не получаю егоРазрешить изменение пользователя из внешнего интерфейса на бэкэнде (Django Admin)
вот мой код
#views.py
def edit_user_profile(request, username):
user = request.user
form = EditProfileForm(request.POST or None, request.FILES, initial={'first_name': user.first_name, 'last_name': user.last_name})
if request.method == 'POST':
if form.is_valid():
# user.photo = UserExtended(photo=request.FILES['photo'] or None,)
photo = UserExtended.objects.get(user=user)
user.first_name = request.POST['first_name']
user.last_name = request.POST['last_name']
# username = request.POST['username']
photo.save()
user.save()
context = {
'form': form,
}
return render(request, 'accounts/profile_updated.html', context)
context = {
'form': form,
'username': username,
}
return render(request, 'accounts/edit_profile.html', context)
#model.py
@python_2_unicode_compatible # only if you need to support Python 2
class UserExtended(models.Model):
user = models.OneToOneField(User, related_name='user')
photo = models.ImageField(upload_to='media/user_media/users', verbose_name='Profile Picture',
default='/media/user_media/avatars/avatar.png', blank=True)
address = models.CharField(max_length=255)
phoneNumber = models.CharField(max_length=11)
class Meta:
verbose_name_plural = _("user")
def __str__(self):
return self.user.username
def image_tag(self):
if self.photo:
return mark_safe('<img src="/media/%s" width="150" height="150" />' % self.photo)
else:
return mark_safe('<img src="/media/user_media/avatars/avatar.png" width="150" height="150" />')
image_tag.allow_tags = True
image_tag.short_description = 'Profile Avatar'
def create_profile(sender, **kwargs):
user = kwargs["instance"]
if kwargs["created"]:
user_extended = UserExtended(user=user)
user_extended.save()
post_save.connect(create_profile, sender=User)
#forms.py
class EditProfileForm(forms.ModelForm):
first_name = forms.CharField(label='First Name', widget=forms.TextInput(attrs={'class': 'form-control'}),
required=False)
last_name = forms.CharField(label='Last Name', widget=forms.TextInput(attrs={'class': 'form-control'}),
required=False)
# username = forms.CharField(widget=forms.TextInput(attrs={'class': 'form-control'}), required=True)
photo = forms.ImageField(label='Change Profile Image', required=False)
class Meta:
model = User
fields = ['photo', 'first_name', 'last_name', ] # 'username',
"""
Спасибо заранее ..