Django额外注册详细信息不保存

时间:2017-09-20 06:59:28

标签: python django

我有一个带有注册表类的form.py并且一切正常但是电子邮件,名字和姓氏,角色等额外的详细信息没有保存到我的帐户/用户个人资料中,但是姓名和电子邮件的名字和电子邮件都保存在AUTHENTICATION和AUTHORIZATION下/用户

我一直想弄清楚我是否与模特,表格或观点混淆了。

可能是什么问题?使用python 3和最新的django

enter image description here

第二

enter image description here

第三

enter image description here

Models.py

class UserProfile(models.Model):
STUDENT = 1
TOURIST = 2
BUSINESS = 3
ADMIN = 4
ROLE_CHOICES = (
    (STUDENT, 'Student'),
    (TOURIST, 'Tourist'),
    (BUSINESS, 'Business'),
    (ADMIN, 'Admin'),
)
user = models.OneToOneField(User, on_delete=models.CASCADE)
# first_name = models.CharField(max_length=100, default='')
# last_name = models.CharField(max_length=100, default='')
email = models.EmailField()
phone = models.IntegerField(default=0)
image = models.ImageField(upload_to='image_profile', blank=True)
role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, null=True, blank=True)

# admin = UserProfileManager()

def __str__(self):
    return self.user.username


def create_profile(sender, **kwargs):
    if kwargs['created']:
        user_profile = UserProfile.objects.create(user=kwargs['instance'])

post_save.connect(create_profile, sender=User)

forms.py

ROLES = ((0, 'Student'), (1, 'Tourist'), (2, 'Business'))


class RegistrationForm(UserCreationForm):
    email = forms.EmailField(required=True)
    role = forms.ChoiceField(choices=ROLES)
class Meta:
    model = User
    fields = (
        'username',
        'first_name',
        'last_name',
        'email',
        'role',
        'password1',
        'password2'
    )

def save(self, commit=True):
    user = super(RegistrationForm, self).save(commit=False)
    user.first_name = self.cleaned_data['first_name']
    user.last_name = self.cleaned_data['last_name']
    user.role = self.cleaned_data['role']
    user.email = self.cleaned_data['email']

    if commit:
        user.save()

    return user

views.py

def register(request):
if request.method == 'POST':
    form = RegistrationForm(request.POST)
    if form.is_valid():
        form.save()
        messages.success(request, 'Your account has been created!')
        return redirect(reverse('city:home'))
else:
    form = RegistrationForm()

    args = {'form': form}
    return render(request, 'account/register_form.html', args)

Admin.py

class UserProfileAdmin(admin.ModelAdmin):
list_display = ('user', 'role', 'email')

def user_info(self, obj):
    return obj.role

def get_queryset(self, request):
    queryset = super(UserProfileAdmin, self).get_queryset(request)
    queryset = queryset.order_by('email')
    return queryset

    role.short_description = 'User Type'

admin.site.register(UserProfile,UserProfileAdmin)

1 个答案:

答案 0 :(得分:1)

通过给定的屏幕截图,我认为您正在使用allauth库。如果你想使用allauth并修改用户模型,那么你必须导入allauth的AbstractUser类

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
      phone = models.CharField(_('Telephone'), blank=True, max_length=20)
      address = models.CharField(_('Address'), blank=True, max_length=255)