首页 > 解决方案 > 在 Django 中注册时将用户添加到组中

问题描述

这里是 Django 的新手。用户分为三种类型:Bronze、Silver 和 Gold,具有不同的权限。所有用户在注册时开始为青铜,然后在满足某些条件时向上移动。因此,我尝试使用 Django 的教程自定义用户模型。到目前为止,我已经能够正确创建用户。但是,我现在想在这些用户注册后立即将他们添加到 Bronze 组,但我不确定该代码应该放在哪里。这是我的代码。它相当简单。 模型.py

# models.py
from django.contrib.auth.models import AbstractUser, Group
from django.db import models

class CustomUser(AbstractUser):
    pass
    # add additional fields in here

    def __str__(self):
        return self.username

表格.py

from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser

class CustomUserCreationForm(UserCreationForm):

    class Meta:
        model = CustomUser
        fields = ('username', 'email')

class CustomUserChangeForm(UserChangeForm):

    class Meta:
        model = CustomUser
        fields = ('username', 'email')

视图.py

from django.shortcuts import render
from django.urls import reverse_lazy
from django.views.generic.edit import CreateView
from .forms import CustomUserCreationForm

# Create your views here.
class SignUpView(CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy('login')
    template_name = 'signup.html'

管理员.py

from django.contrib import admin

# Register your models here.
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin

from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ['email', 'username',]

admin.site.register(CustomUser, CustomUserAdmin)

我可以手动将用户添加到 django shell 上的组中。

>>>currUser.groups.add(Group.objects.get(name='Bronze'))

这段代码放在哪里,以便在注册时执行此命令?

任何帮助表示赞赏。

谢谢

标签: pythondjangodjango-usersdjango-custom-user

解决方案


def 注册(请求):

if request.method == 'POST':
    form = RegistrationForm(request.POST)

    if form.is_valid():
        user = form.save(commit=False)

        user.save()

        user_group = Group.objects.get(name='Mygroup') 

        user.groups.add(user_group)

        #log the user in
        login(request, user)

        return redirect('/summury')

else:

    form = RegistrationForm()

return render(request, 'account/pages/register.html', {'form':form})

推荐阅读