【问题标题】:django clean method on model form模型表单上的 django clean 方法
【发布时间】:2019-03-20 10:51:49
【问题描述】:

我只使用了开箱即用的 Django 表单 API。我现在正在尝试验证 django 模型表单上的表单字段数据 - update_profile。我的模型包含验证器,我应该在哪里(以及为什么)执行清理或保存以便为最终用户提供字段级消息传递?目前,我的错误字典是空的。

class CustomUser(AbstractBaseUser):
    email = models.EmailField(_('email'), max_length=254, unique=True)
    username = models.CharField(_('username'),max_length=15, unique=True,
        validators=[RegexValidator('^[_a-z0-9]+$', message= '15 characters max. Username must be a-z(lowercase), 0-9, can contain underscore', code='invalid_username')])
    about_me = models.CharField(_('about me'),max_length=140)
    avatar = models.ImageField(upload_to='avatars/', blank=True, null=True)
    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=50, blank=True)
        phone_regex = RegexValidator(regex='^\+?1?\d{9,15}$', message='Phone number must be between 9 and 15 digits')
    phone_number = models.CharField(_('phone_number'),max_length=15,  blank=True,
        validators=[phone_regex])
    is_active = models.BooleanField(_('active'), default=False)
    is_staff = models.BooleanField(_('staff'), default=False)

views.py

def update_profile(request):
    user=request.user
    if user.is_authenticated == True:
    if request.method == 'POST':
        form = CustomUserChangeForm(request.POST, instance=user)
        if form.is_valid():
            form.save()
            messages.success(request, 'Your profile was successfully updated.')
            return redirect('update profile')
        else:
            messages.error(request, "Please correct the error below.")

    form = CustomUserChangeForm(instance=user)
    return render(request, 'profile.html', {'form': form})

forms.py

class CustomUserChangeForm(forms.ModelForm):

class Meta:
    model = CustomUser
    fields = ('email', 'first_name', 'last_name', 'about_me','phone_number')

【问题讨论】:

  • 请修复视图中的缩进。
  • 谢谢 - 格式固定

标签: django django-forms


【解决方案1】:

问题出在这段代码中。您丢弃之前验证的表单,创建新表单并将其传递给模板。

form = CustomUserChangeForm(instance=user)
return render(request, 'profile.html', {'form': form})

【讨论】:

    【解决方案2】:

    您需要将无效的表单返回给用户。您应该将空表单的实例化到 else 块中,这样它只会发生在 GET 上。

    if request.method == 'POST':
        form = CustomUserChangeForm(request.POST, instance=user)
        if form.is_valid():
            ...
    else:
        form = CustomUserChangeForm(instance=user)
    return render(request, 'profile.html', {'form': form})
    

    现在在模板中{{ form.errors }} 将显示您的验证错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-29
      • 2015-07-06
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 2011-07-13
      • 1970-01-01
      相关资源
      最近更新 更多