【问题标题】:How to extend field in UserCreationForm in django?如何在 django 中扩展 UserCreationForm 中的字段?
【发布时间】:2020-06-29 12:39:13
【问题描述】:

我一直在尝试在 UserCreationForm 中添加一个电话号码字段,以便在注册时用户提供其电话号码,但不幸的是电话号码没有存储。它接受注册页面上的电话号码,但它不会在网页上显示电话号码。我认为它不是存储。

forms.py

class myCreateForm(UserCreationForm):
ph= forms.CharField(max_length=400, required=True, label='Phone')
class Meta:
    model = User
    fields = ['first_name', 'last_name' ,'username', 'email', 'password1', 'password2','ph']

def save(self, commit=True):
    user = super(myCreateForm, self).save(commit=False)
    user.ph = self.cleaned_data["ph"]
    if commit:
        user.save()
    return user

views.py

def register(request):
form = myCreateForm()
if request.method == "POST":
    form = myCreateForm(request.POST)
    if form.is_valid():
        form.save()
        return redirect('loginPage')
return render(request , 'register.html', {'form' : form})

模板

{%for i in user%}
Hi {{i.first_name}}<br>
Username : {{i.username}}<br>
E-Mail : {{i.email}}<br>
Phone : {{i.ph}}<br>
{%endfor%}

但在我的网页上,它显示了除电话号码之外的所有内容。

请帮帮我

【问题讨论】:

    标签: python django django-forms django-registration


    【解决方案1】:

    您需要扩展 Django 用户模型。请参阅 Docs.

    例如,让我们创建一个新模型 Profile,它将与 django 用户模型具有 OneToOne 关系

    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        phone = models.CharField(max_length=50..)
    

    现在在你的视野中

    form = myCreateForm(request.POST)
        if form.is_valid():
            user = form.save()
            phone = form.cleaned_data.get('ph')
            Profile.objects.create(user=user,phone=ph)
            return redirect...
    

    现在在模板中{{i.profile.phone}} 将给出电话字段的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-01
      • 1970-01-01
      • 2018-04-08
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      相关资源
      最近更新 更多