我已将 djago 的用户模型扩展为模型教师。教师有 3 个字段:
- 用户(一对一字段与用户)
- 模块(多对多字段到模块)
- 已确认( bool 值)
所以我得到了一份适用于非教师的注册表,并为教师复制了它。当用户从教师注册表单注册时,我试图保存教师的 3 个额外字段。
注册应该可以进行,因为它与普通用户的形式相同,但必须保存教师的 3 个附加字段。
我读到,由于 modules
是一个 ManyToManyField
我必须使用 save_m2m()
但我不知道如何获取该值从表单中选择多个字段。
模型.py
class Teacher(models.Model):
user = models.OneToOneField(User)
modules = models.ManyToManyField(Module)
confirmed = models.BooleanField(default=False)
表单.py
class RegistrationFormTeacher(UserCreationForm):
email = forms.EmailField(required=True)
modules = forms.SelectMultiple()
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
def save(self, commit=True):
user = super(RegistrationFormTeacher, self).save(commit=False)
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
View .py
def register_teacher(request):
args = {}
universities = University.objects.order_by('name').distinct()
if request.method == 'POST':
form = RegistrationFormTeacher(request.POST)
if form.is_valid():
new_teacher = form.save(commit=False)
new_teacher.modules = form.cleaned_data['modules']
new_teacher.save()
form.save_m2m()
return HttpResponseRedirect(reverse('dashboard_teacher'))
else:
form = RegistrationFormTeacher()
args['form'] = form
return render_to_response("registration/registration_form_teacher.html", {'universities': universities}, RequestContext(request))
最佳答案
您想要创建一个 Teacher
模型,但您的模型表单的模型是 User
- 因此您没有按照您想要的方式保存您想要的内容。
绝对最简单但不一定是最优雅的方法是使用两个单独的表单。
class UserRegistrationForm(UserCreationForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'username', 'password1', 'password2')
class RegistrationFormTeacher(forms.ModelForm):
class Meta:
model = Teacher
fields = (modules, confirmed)
然后当您处理 RegistrationFormTeacher 时:
if request.method == 'POST':
form = RegistrationFormTeacher(request.POST)
if form.is_valid():
new_teacher = form.save(commit=False)
new_teacher.user = request.user #get the user object however you want - you
#can pass the user ID to the view as a parameter and do
#User.objects.get(pk=id) or some such, too.
new_teacher.save()
form.save_m2m()
关于python - Django,注册扩展用户模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23315337/