代码之家  ›  专栏  ›  技术社区  ›  Souvik Ray

表单字段未存储在Django用户模型中

  •  0
  • Souvik Ray  · 技术社区  · 6 年前

    我有一份我在下面定义的报名表

    形式。py

    from django.contrib.auth.models import User
    from django.contrib.auth.forms import UserCreationForm
    from django import forms
    
    class SignUpForm(UserCreationForm):
        display_name = forms.CharField(max_length=30, required=True, help_text='Please provide a display name for your profile')
        class Meta:
            model = User
            fields = ('username', 'password1', 'password2', 'display_name')
    

    在视图中。py,我负责注册过程

    意见。py

    from django.contrib.auth.models import User
    from django.contrib.auth import login, authenticate
    from .forms import SignUpForm
    from django.shortcuts import render, redirect
    
    
    @csrf_exempt
    def signup_users(request):
        if request.method == 'POST':
            form = SignUpForm(request.POST)
            if form.is_valid():
                user = form.save(commit=False)
                username = form.cleaned_data.get('username')
                display_name = form.cleaned_data.get('display_name')
                raw_password = form.cleaned_data.get('password1')
    
                user.set_password(raw_password)
                user.display_name = display_name
                user.save()
                user = authenticate(username=username, password=raw_password)
                print("signup authencticate", user)
                login(request, user)
                return render(request, 'index.html')
        else:
            form = SignUpForm()
        return render(request, 'signup.html', {'form': form})
    

    用户可以成功注册,但是 display_name 不会存储在django用户模型中。即使在django管理员中,我也看不到字段 显示你的名字 .我甚至做过这样的查询 serializers.serialize("json",User.objects.filter(username=username)) 但即使在这里,它也显示了除 显示你的名字 .

    我做错了什么?

    1 回复  |  直到 6 年前
        1
  •  2
  •   bruno desthuilliers    6 年前

    很简单 django.contrib.auth.models.User 模型没有指定字段名 display_name 所以它当然不会被保存。如果要向用户模型中添加字段,必须 provide a custom User model .