【问题标题】:edit and update user model in django在 django 中编辑和更新用户模型
【发布时间】:2021-07-12 07:43:37
【问题描述】:

我的注册和登录表单运行良好,但我正在尝试编辑用户个人资料,但我似乎无法使其正常工作,以下是我的代码,您能指出我所犯的错误吗?

/views.py

@login_required()
def profile(request):
    if request.method == 'POST':
        # current_user = UserProfile.objects.get(username=request.user)
        form = UserDetailsUpdate(request.POST, instance=request.user)
        if form.is_valid():
            form.save(commit=True)
            return redirect('profile')
    form = UserDetailsUpdate(instance=request.user)
    return render(request, 'profile.html', {'form': form})

/models.py

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    sex = models.CharField(max_length=20, blank=True)
    website = models.URLField(blank=True)
    image = models.ImageField(blank=True)

    def __str__(self):
        return self.user.username

/forms.py

class UserDetailsUpdate(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('image', 'website', 'sex')

/template/profile.html

{% if form %}
        <form action="" method="post" enctype="multipart/form-data">
            {% csrf_token %}
            <div class="container">
                    {{ form.as_p }}
                    <input type="submit" value="Submit">
            </div>
        </form>
    {% endif %}

【问题讨论】:

  • 你能分享你呈现表单的模板的相关部分吗?
  • @WillemVanOnsem 我刚刚做到了
  • 你好@WillemVanOnsem 请你看一下吗?

标签: python django django-models django-views django-forms


【解决方案1】:

看看你的模型,我认为你错过了一些东西,

  • 无法将 UserProfile 模型与您与 User 模型的一对一关系相关联。
  • 其次,传递给 UserDetailsUpdate 表单的实例应该引用 UserProfile 模型。
  • 最后,为了使用当前数据填充更新字段,还必须使用我的第二点的答案。 以下是您的解决方案。

在这里创建您的模型。

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    sex = models.CharField(max_length=20, blank=True)
    website = models.URLField(blank=True)
    image = models.ImageField(blank=True)

    def __str__(self):
        return self.user.username

    @receiver(post_save, sender=User)
    def create_profile(sender, instance, created, **kwargs):
        if created:
            Profile.objects.create(user=instance)


    @receiver(post_save, sender=User)
    def save_profile(sender, instance, **kwargs):
        instance.profile.save()

上述代码将在任何时候创建一个新用户时创建一个相应的用户配置文件模型。

/views.py

@login_required()
def profile(request):
    if request.method == 'POST':
        # current_user = UserProfile.objects.get(username=request.user)
        form = UserDetailsUpdate(request.POST, instance=request.user.userprofile)
        if form.is_valid():
            form.save(commit=True)
            return redirect('profile')
    form = UserDetailsUpdate(instance=request.user.userprofile)
    return render(request, 'profile.html', {'form': form})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-29
    • 2012-03-19
    • 2019-04-09
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    相关资源
    最近更新 更多