【发布时间】:2017-10-08 17:58:42
【问题描述】:
我是一个 Django 新手,如果我没有使用正确的术语,请提前道歉。
我正在使用 django-registration 在我的网络应用程序上注册用户。我已经成功地将它与我的自定义用户模型GeneralUser 一起使用。
从概念上讲,每个GeneralUser 都有一个Business,这是我定义的另一个模型。不管这是否是正确的决定,我已经决定我永远不想注册没有相关 Business 对象的用户。
我已经阅读了无数关于自定义 django 表单的主题,最后在尝试了几天不成功后,找到了帮助找到解决方案的 an answer。但是,我不确定我的代码是否正确/安全。这是我的改编,后面是链接答案:
我的改编:
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 user
我不用
cleaned_data,可以吗?原代码中
if not commit块的作用是什么?最重要的是,这是一种处理用户注册的“合法方式”吗?需要在创建时自动建立对象关系?
【问题讨论】:
标签: python django django-registration