Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 允许用户';s前端的更改反映在后端(Django Admin)_Python_Django_Web_Web Frontend - Fatal编程技术网

Python 允许用户';s前端的更改反映在后端(Django Admin)

Python 允许用户';s前端的更改反映在后端(Django Admin),python,django,web,web-frontend,Python,Django,Web,Web Frontend,我试图让我的用户从前端更新他们的个人资料,允许它反映在django管理员,特别是更新个人资料图像。user.first\u name和user.last\u name的更改可以正常工作,但图像的后端也没有反映出来。 我想我遗漏了一些东西,另外,当firstname和lastname的字段为空时,它将作为null发布,我想我会使用一个例外,但我更关心的是配置文件图像。请帮帮我,我不明白 这是我的密码 #views.py def edit_user_profile(request, user

我试图让我的用户从前端更新他们的个人资料,允许它反映在django管理员,特别是更新个人资料图像。
user.first\u name
user.last\u name
的更改可以正常工作,但图像的后端也没有反映出来。 我想我遗漏了一些东西,另外,当firstname和lastname的字段为空时,它将作为null发布,我想我会使用一个例外,但我更关心的是配置文件图像。请帮帮我,我不明白

这是我的密码

#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',
            """
#views.py
def编辑用户档案(请求、用户名):
user=request.user
form=EditProfileForm(request.POST或None,request.FILES,initial={'first\u name':user.first\u name,'last\u name':user.last\u name})
如果request.method==“POST”:
如果form.is_有效():
#user.photo=UserExtended(photo=request.FILES['photo']或None,)
photo=UserExtended.objects.get(user=user)
user.first\u name=request.POST['first\u name']
user.last\u name=request.POST['last\u name']
#username=request.POST['username']
照片保存()
user.save()
上下文={
“形式”:形式,
}
返回呈现(请求“accounts/profile_updated.html”,上下文)
上下文={
“形式”:形式,
“用户名”:用户名,
}
返回呈现(请求“accounts/edit_profile.html”上下文)
#model.py
@python_2_unicode_兼容#仅当您需要支持python 2时
类UserExtended(models.Model):
user=models.OneToOneField(用户,相关的\u name='user')
photo=models.ImageField(上传到`media/user`媒体/users',详细的`name='Profile Picture',
默认值='/media/user_media/avatars/avatar.png',空白=真)
地址=models.CharField(最大长度=255)
phoneNumber=models.CharField(最大长度=11)
类元:
详细名称复数=(用户)
定义(自我):
返回self.user.username
def图像_标签(自身):
如果self.photo:
返回安全标记(''%self.photo)
其他:
返回标记_安全(“”)
image\u tag.allow\u tags=True
image_tag.short_description='Profile Avatar'
def创建_配置文件(发送方,**kwargs):
user=kwargs[“实例”]
如果kwargs[“已创建”]:
用户扩展=用户扩展(用户=用户)
用户_扩展。保存()
post_save.connect(创建_配置文件,发件人=用户)
#forms.py
类EditProfileForm(forms.ModelForm):
first_name=forms.CharField(label='first name',widget=forms.TextInput(attrs={'class':'form control'}),
必需=错误)
last_name=forms.CharField(label='last name',widget=forms.TextInput(attrs={'class':'form control'}),
必需=错误)
#username=forms.CharField(widget=forms.TextInput(attrs={'class':'form control'}),required=True)
photo=forms.ImageField(label='Change Profile Image',required=False)
类元:
模型=用户
字段=[“照片”、“名字”、“姓氏”、“用户名”],
"""

提前感谢您。

好的,在使用PyCharm进行调试时,我发现我使用的是我的
User
类的实例,而不是我的
UserExtended
,上面有照片。我想我在发布
User.first\u name
User.last\u 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)