使用附加模型创建视图
CreateView with additional model
我正在使用 CreateView 创建用户。
views.py:
class UserCreateView(CreateView):
model = User
form_class = UserCreateForm
success_url = reverse_lazy('patient:users')
forms.py
class UserCreateForm(ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name']
我有另一个模型,UserGroups,定义如下:
class UserGroup(models.Model):
users = models.ManyToManyField(User, blank=True, related_name='user_groups')
name = models.CharField(max_length=50)
问题是我希望能够将用户组分配给 UserCreateForm 中的用户。这样做:
class UserCreateForm(ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name', 'user_groups']
好像不行。
最好的方法是什么?
您需要向 UserCreateForm 添加一个额外的字段:
class UserCreateForm(ModelForm):
groups = forms.ModelMultipleChoiceField(queryset=UserGroup.objects.all())
并在您的 CreateView 的 form_valid
方法中设置它:
def form_valid(self):
response = super(UserCreateView, self).form_valid()
self.object.user_groups = self.form.cleaned_data['groups']
return response
我正在使用 CreateView 创建用户。
views.py:
class UserCreateView(CreateView):
model = User
form_class = UserCreateForm
success_url = reverse_lazy('patient:users')
forms.py
class UserCreateForm(ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name']
我有另一个模型,UserGroups,定义如下:
class UserGroup(models.Model):
users = models.ManyToManyField(User, blank=True, related_name='user_groups')
name = models.CharField(max_length=50)
问题是我希望能够将用户组分配给 UserCreateForm 中的用户。这样做:
class UserCreateForm(ModelForm):
class Meta:
model = User
fields = ['first_name', 'last_name', 'user_groups']
好像不行。
最好的方法是什么?
您需要向 UserCreateForm 添加一个额外的字段:
class UserCreateForm(ModelForm):
groups = forms.ModelMultipleChoiceField(queryset=UserGroup.objects.all())
并在您的 CreateView 的 form_valid
方法中设置它:
def form_valid(self):
response = super(UserCreateView, self).form_valid()
self.object.user_groups = self.form.cleaned_data['groups']
return response