首页 > 解决方案 > Django 通过一种形式注册多个用户

问题描述

我想通过首先输入一些单词来注册多个用户,例如以“test_user”开头的名称和用户数“3”,它将创建用户“test_user1”、“test_user2”、“test_user3”

这是我的代码


视图.py

class CustomSignupView(SuccessMessageMixin, FormView):
form_class = UserCreateForm
success_url ="profile/"
template_name = "account/signup.html"

def form_valid(self, form):
    usernames = []
    username = form.cleaned_data['username']
    stuNumber = form.cleaned_data['stuNumber']

    if int(stuNumber) != 1:
        for i in range(0, int(stuNumber)):
            usernames.append(username + str(i + 1))
            form.instance.username = usernames[i]
            form.save()
    else:
        form.save()
    
    return redirect(self.success_url)

表格.py

class UserCreateForm(forms.ModelForm):
username = forms.CharField(max_length=30, label='Username')
password = forms.CharField(label='Password')
stuNumber = forms.CharField(label='StuNumber')

class Meta:
    model = user
    fields = ['username', 'stuNumber']

def generate_password(self):
    password = Account.objects.make_random_password(length=10)
    return password

def save(self, commit=True):
    user = super(UserCreateForm, self).save(commit=False)
    user.set_password(self.cleaned_data['password'])

    if commit:
        user.save()
        return user 

问题是当我想创建 3 个用户并输入数字 3 时,它只为 user3 创建 1 个表单,没有 user1 和 user2。解决不了,求助,谢谢!!

标签: pythondjangodjango-allauth

解决方案


我认为这是因为您的表单实例在保存后只是在循环内更新而不是初始化一个新实例。以下应该可以工作,每次只需创建一个新的表单实例。

def form_valid(self, form):
    usernames = []
    username = form.cleaned_data['username']
    stuNumber = form.cleaned_data['stuNumber']

    if int(stuNumber) != 1:
        for i in range(0, int(stuNumber)):
            # handle if there are other fields 
            new_form = UserCreateForm({
                           'username':(username + str(i + 1)),
                          'stuNumber': i
                       })
            if new_form.is_valid():
                 new_form.save()
    else:
        form.save()
    
    return redirect(self.success_url)

推荐阅读