2017-01-13 4 views
-1

Я пытаюсь, чтобы мои пользователи обновляли свой профиль из 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', 
      """ 

Спасибо заранее ..

ответ

0

ИТАК при отладке с PyCharm я обнаружил, что я использовал экземпляр мой Пользовательский класс вместо моего UserExtended, у которого была фотография. Я предполагаю, что я получил слишком комфортно, так как я отправлял user.fist_name и user.last_name .. это решение ...

#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(): 
      #photo = UserExtended(photo=request.FILES['photo'] or None,) 
      user_extended = UserExtended.objects.get(user=user) 
      user.first_name = request.POST['first_name'] 
      user.last_name = request.POST['last_name'] 
      user_extended.photo = form.cleaned_data["photo"] 
      # username = request.POST['username'] 
      user_extended.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)