Django:创建具有关系的表单
我准备了一个有关系的模型。 我想得到一个表单,它可以为该表单创建用户 有人能告诉我怎么解决吗Django:创建具有关系的表单,django,forms,relationship,formset,Django,Forms,Relationship,Formset,我准备了一个有关系的模型。 我想得到一个表单,它可以为该表单创建用户 有人能告诉我怎么解决吗 class UserProfile(models.Model): user = models.OneToOneField(User, unique=True, primary_key=True) website = models.URLField(null=True, blank=True) accepted_rules = models.BooleanField(default
class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True, primary_key=True)
website = models.URLField(null=True, blank=True)
accepted_rules = models.BooleanField(default=False)
accepted_rules_date = models.DateTimeField(auto_now_add=True)
class UserProfile(ModelForm):
class Meta:
model = UserProfile
@csrf_protect
def register(request):
if request.method == "POST":
form = UserProfile(request.POST or None)
if form.is_valid():
website = form.cleaned_data['website']
accepted_rules = form.cleaned_data['accepted_rules']
username = form.cleaned_data['username']
email = form.cleaned_data['email']
password = form.cleaned_data['password']
form.save()
print "All Correct"
return TemplateResponse(request, 'base.html', {
'form':form,
}
)
这是我考虑的一种方式。首先,我将表单命名为UserProfileForm,这样它的名称就不会与模型冲突。为创建新用户所需的字段向UserProfile表单添加额外字段。创建新的用户实例。使用form.save(commit=False),以便可以将新创建的用户实例添加到UserProfile实例并保存它。也许还有更优雅的方式
from django import forms
class UserProfileForm(forms.ModelForm):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput())
email = forms.EmailField()
class Meta:
model = UserProfile
from django.contrib.auth.models import User
@csrf_protect
def register(request):
if request.method == "POST":
form = UserProfileForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
email = form.cleaned_data['email']
password = form.cleaned_data['password']
user = User(username=username, email=email)
user.set_password(password)
user.save()
user_profile = form.save(commit=False)
user_profile.user = user
user_profile.save()
print "All Correct"
return TemplateResponse(request, 'base.html', {'form':form})
请注意
用户(用户名、密码、电子邮件)
用法不正确。您需要传递名为参数的模型类,例如username=username
才能工作:通常pk
是构造函数的第一个参数,因此您实际上会将User()w/pk
设置为username。此外,参考文献,不要使用password=…
,这是在您的代码中隐式完成的,用于User
构造。@okm,绝对正确。我混用了User.objects.create_User()
,但仍然有错误的参数顺序,并在上面进行了编辑以反映正确的密码设置。是否应该在视图中处理关系?将所有这些封装在表单中似乎更符合逻辑。我没有看到太多关于它的文档,我想。。。