如何解决如何在Django中以编程方式添加用户以进行分组
我有一个Django项目,其中每个用户仅属于一个组,Doctor和Nurse而不是两者。
我在前端显示了一个表单,可让Admin用户添加用户个人资料,其中每个用户个人资料均由名字,姓氏,电子邮件,组等组成。
我的挑战是,当管理员用户从前端向用户组分配用户个人资料时,当我检查Django admin时,该用户未添加到该组,即当我单击Django admin上的on用户时,我看不到分配给该组的用户。
forms.py的重要部分是这一部分
my $clone := callwith(|%_)
完整的表单可以在此处查看
from django.contrib.auth.models import Group
groups = forms.ModelChoiceField(label='Role',queryset=Group.objects.all(),widget=forms.Select(attrs={'class':'form-control'}))
我的观点
from django.contrib.auth.forms import UserCreationForm
from django_starter_app.models import User,Post
from django.contrib.auth.models import Group
class RegisterForm(UserCreationForm):
username = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Enter Username'}))
email = forms.CharField(widget=forms.EmailInput(attrs={'class':'form-control','placeholder':'Email'}))
first_name = forms.CharField(label='Firstname',widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Firstname'}))
last_name = forms.CharField(label='Lastname','placeholder':'Lastname'}))
groups = forms.ModelChoiceField(label='Role',widget=forms.Select(attrs={'class':'form-control'}))
password1 = forms.CharField(label='Password',widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'Password'}))
password2 = forms.CharField(label='Confirm Password','placeholder':'Confirm Password'}))
class Meta():
model = User
fields = ('username','email','first_name','last_name','groups','password1','password2')
def save(self,commit=True):
user = super().save(commit=False)
user.username = self.cleaned_data['username']
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.groups = self.cleaned_data['groups']
user.password1 = self.cleaned_data['password1']
user.password2 = self.cleaned_data['password2']
if commit:
user.save()
return user
请我想知道我在哪里弄错了,我怀疑我在哪里做支票
def register_user(request):
if request.method == 'POST':
reg = RegisterForm(request.POST)
if reg.is_valid():
reg.save()
role= reg.cleaned_data.get('groups')
if role== 1:
doctor_group = Group.objects.get(name='Doctor')
reg.groups.add(doctor_group)
return redirect('register_user')
elif role == 2:
nurse_group = Group.objects.get(name='Nurse')
reg.groups.add(nurse_group)
return redirect('register_user')
else:
reg = RegisterForm()
return render(request,'django_starter_app/register.html',{'register':reg})
解决方法
reg = RegisterForm(request.POST)
if reg.is_valid():
**user = reg.save()**
role= reg.cleaned_data.get('groups')
if role== 1:
doctor_group = Group.objects.get(name='Doctor')
**user.groups.add(doctor_group)**
ModelName.objects.create( user = user,)
return redirect('register_user')
elif role == 2:
nurse_group = Group.objects.get(name='Nurse')
**user.groups.add(nurse_group)**
ModelName.objects.create( user = user,)
return redirect('register_user')
验证表单后,需要一个变量来保存保存表单。 获取组后,您需要使用该变量。
我已突出显示代码中所需的更改。
,您可以尝试如下操作。我认为,根据您的代码,无需执行省略号。
def register_user(request):
if request.method == 'POST':
reg = RegisterForm(request.POST)
if reg.is_valid():
user = reg.save(commit=False)
role = reg.cleaned_data.get('groups')
group = user.set_add(user)
reg.save()
return redirect('register_user')
else:
reg = RegisterForm()
return render(request,'django_starter_app/register.html',{'register':reg})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。