假设我有一个父类MyUser的modelForm,它保存用户的公共信息。
用户有一个名为role的字段,表示他们所处的角色,我有3个特殊模型,其中有3个角色。
我想要做的是在保存表单时检查表单的角色字段。如果它是这3个特殊角色中的一个,我想保存特殊模型(MyUser的子节点)而不是MyUser ,否则,我希望save方法正常执行。(保存实际的MyAbstractUser)。
class MyUserForm(forms.ModelForm):
retyped_pass = forms.CharField(label='Password Confirmation', widget=forms.PasswordInput, max_length=30, required=True)
class Meta:
model = MyUser
def save(self, ?):
if self.fields['role'] == 'researcher'
save ResearcherUser instead of MyUser
....
else: # if none of above
save MyUser
特殊用户类型是ResearcherUser,ProducerUser和CenterUser,如果角色不是这三个,我希望它是一个MyUser。
知道我怎么能实现这个目标? 在此先感谢:)
答案 0 :(得分:1)
假设MyUser
的模型表单中的字段与特殊用户类型的字段完全相似,您可以执行以下操作
def save(self, *args, **kwargs):
if self.fields['role'] == 'researcher'
return ResearchUser.objects.get_or_create( **self.fields)
....
else: # if none of above
super(MyUserForm, self).save(*args, **kwargs)
注意:您可能希望使用比.get_or_create()
更好的内容,它会在所提供的所有字段中查找现有对象。但它可能找不到并试图创造新的。
请参阅the docs了解具体行为。