我完全是Django新手,如果我没有使用正确的术语,请提前道歉。
我正在使用django注册注册用户在我的网络应用程序。我已经成功地将它与我的自定义用户模型GeneralUser相结合。
从概念上讲,每个GeneralUser都有一个Business,这是我定义的另一个模型。无论这是否是正确的决定,我已经决定我永远不想注册一个没有相关的Business对象的用户。
我读过无数关于定制django表单的线程,最后,经过几天的失败尝试,我终于找到了帮助实现解决方案的an answer。但是,我不确定我的代码是否正确/安全。这是my适配,后面是链接答案:
我的适应
class GeneralUserForm(UserCreationForm):
business_name = forms.CharField(required=True)
class Meta:
model = GeneralUser
fields = ['username', 'email', 'password1',
'password2', 'business_name']
def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=True)
business = Business(name=user.business_name, owner=user)
# notice: no if-block
user.save()
business.save()
# notice: returning only a user-instance
return user此代码成功地创建了用户和业务对象,并创建了关系。不过,看看最初的答案代码,我想知道我是否遗漏了一些关键的东西:
答案我的代码基于:
class UserCreateForm(UserCreationForm):
job_title = forms.CharField(max_length=100, required=True)
age = forms.IntegerField(required=True)
class Meta:
model = User
def save(self, commit=True):
if not commit:
raise NotImplementedError("Can't create User and UserProfile without database save")
user = super(UserCreateForm, self).save(commit=True)
user_profile = UserProfile(user=user, job_title=self.cleaned_data['job_title'],
age=self.cleaned_data['age'])
user_profile.save()
# notice: multiple returns
return user, user_profile关于这些差异的几个问题:
。
if commit:
user.save()
business.save()
return usercleaned_data,可以吗?if not commit块在原始代码中的用途是什么?发布于 2017-05-10 08:22:28
cleaned_data是数据字典,在每个字段中都有这种形式的验证。现在您可以决定是否依赖它(最好应该).So作为伪代码,我们可以说cleaned_data + errors将是所有字段。commit用于决定是否应该提交db(write)。从上面的代码中,要添加像profile这样的相关模型对象,必须创建原始对象(User)为什么要强制提交。post_save信号、覆盖模型save、重写表单save etc.So --我认为这是一种很好的方法。https://stackoverflow.com/questions/43886493
复制相似问题