【问题标题】:Django UserCreationForm extensionDjango UserCreationForm 扩展
【发布时间】:2018-03-01 14:50:54
【问题描述】:

我可以在当前包含用户名、电子邮件、密码 1 和密码 2 的 UserCreationForm 扩展中添加地址、城市、州、国家、密码和安全问题和答案等字段。如果是,请说明如何?

forms.py

class UserCreationForm(UserCreationForm):
    email = EmailField(label=_("Email address"), required=True,
        help_text=_("Required."))
    city= forms.CharField(label= _("City"),max_length=20, required=True)
    state= forms.CharField(label= _("State"),max_length=20, required=True)

    class Meta:
        model = User
        fields = ("username", "email", "password1", "password2","city","state")

    def save(self, commit=True):
        user = super(UserCreationForm, self).save(commit=False)
        user.email = self.cleaned_data["email"]
        user.city = self.cleaned_data["city"]
        user.state = self.cleaned_data["state"]

        if commit:
            user.save()
        return user

【问题讨论】:

    标签: django views


    【解决方案1】:

    目前您正在扩展 UserCreationForm 类,如果您在用户模型中有其他字段,那么您可以使用 forms.ModelForm 并仅提及其他字段。

    例如

    class UserForm(forms.ModelForm):
        class Meta:
            model = User
            fields = ['username','name', 'email', 'phone', 
                  'address','city','state', 'first_time']
    

    如果你想使用自定义表单,那么。

    class UserForm(forms.Form):
          name = forms.CharField(label= _("Name"))
          address = forms.CharField(label=_("Address"))
          etc.
    

    【讨论】:

    • 嗯,这是在做很多已经完成的事情。这就是框架的目的,而不是一次又一次地创造轮子。我认为这不应该是公认的,但无论如何
    • 这并没有回答“扩展 UserCreationForm”。在这里你只是通过它。
    【解决方案2】:

    是的,就像你对电子邮件所做的那样:

    class UserCreationForm:
        a_field = WhateverField(whatever='whatever'...)
    
        class Meta:
            model = User
            fields = ("username", "email", "password1", "password2")
    

    该字段现已添加到您的表单中。

    【讨论】:

    • 我如何使用特定选项中的国家/地区下拉菜单?
    • 您可以在__init__() 方法中更改您的字段。 self.fields['a_field']['property'] = .... 然后只需调用超级super(UserCreationForm, self).__init__(args, kwargs)。但这是另一个问题,你应该问它。
    • 这里有问题。我添加的地址,国家,州等字段显示在表单上,​​但是当我查询 User.country 或除内置之外的任何内容时,它给我用户没有属性国家...我已经修改了代码.请看一看。
    • 是的,django 的用户没有属性国家,你在使用另一个用户模型吗?更进一步时不要修改你的问题,问另一个。现在主题和正文不一样了。如果要在 User 模型中添加一些字段,则需要做另一个模型。但是再问一个问题,在这里回答你所有的问题会很复杂
    猜你喜欢
    • 1970-01-01
    • 2018-04-08
    • 2013-04-18
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2012-06-13
    相关资源
    最近更新 更多