【问题标题】:name 'user' is not defined, django forms名称 \'user\' 未定义,django 形式
【发布时间】:2023-02-25 01:57:27
【问题描述】:

我有一个用户抽象用户模型,其中包含一些字段,包括助记符,它是一个 CharField 和一个图像,它是一个 ImageField。

我希望能够使用助记符作为确认字段来更改表单中的图像,但我无法在 clean() 方法中获取旧助记符,因此我得到名称“用户”未定义。

class User(AbstractUser):
    mnemonic = models.CharField(max_length=25, blank=True)
    image = models.ImageField(null=True, default='default.jpg', upload_to='pictures')

    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)
class UserUpdateForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ['image', 'mnemonic']

    def clean(self):
        super(UserUpdateForm, self).clean()
        mnemonic = self.cleaned_data.get('mnemonic')
        if mnemonic != user.mnemonic: # name 'user' is not defined, line where I need to get the old mnemonic
            self._errors['mnemonic'] = self.error_class([
                'The mnemonic is wrong!'])
        return self.cleaned_data
    <form method="POST" enctype="multipart/form-data">
        {% csrf_token %}
        <p class="article-title"><b>Profile Info</b></p>
        {{ profile_form }}
        <div>
            <button type="submit">Update</button>
        </div>
    </form>
def ProfileView(request):
    user = request.user

    if request.method == 'POST':
        profile_form = UserUpdateForm(request.POST, request.FILES, instance=user)
        if profile_form.is_valid():
            profile_form.save()
            messages.success(request, f'Your account has been updated!')
            return redirect('profile')

    else:
        profile_form = UserUpdateForm()

    context = {
        'user': user,
        'profile_form': profile_form,
    }

    return render(request, 'users/profile.html', context)

【问题讨论】:

  • 也分享您对此的看法。
  • 我编辑了我的帖子并添加了视图。

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


【解决方案1】:

错误 user is not defined 是完全合理的,因为 user 没有在任何地方定义。

要解决这个问题,请尝试使用self.instance.mnemonic,它将给出当前实例的助记符:

class UserUpdateForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ['image', 'mnemonic']

    def clean(self):
        super(UserUpdateForm, self).clean()
        mnemonic = self.cleaned_data.get('mnemonic')
        if mnemonic != self.instance.mnemonic:
            self._errors['mnemonic'] = self.error_class([
                'The mnemonic is wrong!'])
        return self.cleaned_data

笔记:基于函数的视图一般写在snake_case而不是PascalCase,不像基于类的视图,所以最好将它从ProfileView重命名为profile_view

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2022-10-16
    • 2018-07-14
    相关资源
    最近更新 更多