首页 > 解决方案 > 如何将自定义用户模型添加到管理面板的用户部分 - django 3.1.1

问题描述

我在我的 django 项目中添加了一个自定义用户模型,这里对此进行了解释。

我这样定义了额外的字段models.py

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    company = models.CharField(max_length=25, blank=True)
    address = models.TextField(max_length=500, blank=True)
    zipcode = models.CharField(max_length=15, blank=True)
    city = models.CharField(max_length=25, blank=True)
    country = models.CharField(max_length=25, blank=True)
    phone = models.CharField(max_length=15)
    

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()

在我views.py的,注册是这样的:

from django.shortcuts import render, redirect
from django.contrib.auth.models import User

def update_profile(request, user_id, company, address, zipcode, city, country, phonenumber):
    user = User.objects.get(pk=user_id)
    user.profile.company = company
    user.profile.address = address
    user.profile.zipcode = zipcode
    user.profile.city = city
    user.profile.country = country
    user.profile.phoneNumber = phonenumber
    user.save()

def register(request):
    if request.method == 'POST':
        # Get form values
        first_name = request.POST['firstname']
        last_name = request.POST['lastname']

        company = request.POST['company']
        address = request.POST['address']

        zipcode = request.POST['zipcode']
        city = request.POST['city']

        country = request.POST['country']
        phoneNumber = request.POST['phoneNumber']

        username = request.POST['username']
        email = request.POST['email']

        password = request.POST['password']
        password2 = request.POST['password2']

        # Check if password match
        if password == password2:
            # Check username
            if User.objects.filter(username=username).exists():
                return redirect('register')
            else:
                if User.objects.filter(email=email).exists():
                    return redirect('register')
                else: 
                    # looks good
                    user = User.objects.create_user(username=username, 
                                                    password=password,
                                                    email=email,
                                                    first_name=first_name,
                                                    last_name=last_name)


                    user.save()
                    update_profile(request, user.id, company, address, zipcode, city, country, phoneNumber)
                    return redirect('login')

        else:
            return redirect('register')
    else:
        return render(request, 'users/register.html')

现在,在管理面板中,应将自定义模型添加到单独的部分中,如下所示:

from django.contrib import admin
from .models import Profile

admin.site.register(Profile)

在此处输入图像描述

如何在部分users下的页面中添加自定义用户模型(即配置文件)的字段AUTHENTICATION AND AUTHORIZATION

标签: pythondjangodjango-3.1

解决方案


推荐阅读