首页 > 解决方案 > 可以覆盖用户模型以使电子邮件字段成为必需吗?

问题描述

对于我的应用程序,Django 中的电子邮件字段User model应该是必需的,但默认情况下它是可选的。

我搜索了这个问题,但我发现的大多数答案都是关于在自定义UserCreationForm 中设置所需的电子邮件字段,例如

class CustomUserForm(UserCreationForm):
    """Provide a view for creating users with only the requisite fields."""

    class Meta:
        model = User
        # Note that password is taken care of for us by auth's UserCreationForm.
        fields = ('username', 'email')

    def __init__(self, *args, **kwargs):
        super(CustomUserForm, self).__init__(*args, **kwargs)
        self.fields['email'].required = True

但我也想在User模型中强制发送电子邮件,因为我在想可能ModelForm是前端的东西,并且用户可能通过使用 chrome 开发工具关闭了所需的条件,我错了吗?在用户中设置所需的电子邮件ModelForm是否与在用户中设置相同model或者我可以覆盖用户模型以使电子邮件成为必需?

标签: djangodjango-modelsdjango-formsdjango-authentication

解决方案


也许 ModelForm 是一个前端的东西,用户可能通过使用 chrome 开发工具关闭了所需的条件,我错了吗?

您是正确的,用户可以使用工具来制作不需要的输入项,实际上您通常可以更改 DOM 并因此更改 HTML 表单,或者更简单地使用诸如curl发出 POST 请求之类的工具,您可以发布任意数据。

但是 a Form(在某种程度上是 a ModelForm不仅在 HTML 中呈现表单,它还用于验证数据。因此,这意味着如果您使用以下视图:

def my_view(request):
    if request.method == 'POST':
        form = CustomUserForm(request.POST, request.FILES)
        if form.is_valid():
            # …
        # …
    # …

如果用户未填写电子邮件地址,form.is_valid()则将返回。False因此,表单用于验证、清理数据、将数据存储在模型中以及呈现 HTML 表单。


推荐阅读