Python 将表单中的数据保存到2个模型中
我正在用Django创建一个注册和登录应用程序。我使用表单和POST获取数据。 我想将表单数据保存到两个Django模型中:Python 将表单中的数据保存到2个模型中,python,django,django-models,django-views,model,Python,Django,Django Models,Django Views,Model,我正在用Django创建一个注册和登录应用程序。我使用表单和POST获取数据。 我想将表单数据保存到两个Django模型中: class Customer(models.Model): username = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE) name = models.CharField(max_length=200, null=True) email =
class Customer(models.Model):
username = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE)
name = models.CharField(max_length=200, null=True)
email = models.CharField(max_length=200)
def __str__(self):
return self.name
以及Django用户模型
forms.py
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from .models import *
class CreateUserForm(UserCreationForm):
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
def registerPage(request):
form = CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
form2 = Customer
print(form)
if form.is_valid():
form.save()
user = form.cleaned_data.get('username')
name = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
form2.save(user, name, email)
messages.success(request, 'Account was created for ' + user)
return redirect('login')
context = {'form': form}
return render(request, 'login/register.html', context)
注册视图.py
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from .models import *
class CreateUserForm(UserCreationForm):
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
def registerPage(request):
form = CreateUserForm()
if request.method == 'POST':
form = CreateUserForm(request.POST)
form2 = Customer
print(form)
if form.is_valid():
form.save()
user = form.cleaned_data.get('username')
name = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
form2.save(user, name, email)
messages.success(request, 'Account was created for ' + user)
return redirect('login')
context = {'form': form}
return render(request, 'login/register.html', context)
现在我的问题是,如何将表单数据保存到用户模型中,以及如何将数据(用户、姓名、电子邮件)保存到客户模型中
我尝试使用form2.save(用户、姓名、电子邮件),但收到一条错误消息:
“str”对象没有属性“\u meta”
谢谢你的帮助
编辑:
我尝试了@Moha369的解决方案,但现在我收到一条错误消息,上面说:
无法分配“'test1.2'”:“Customer.username”必须是“User”实例从技术上讲,这是不可能的,因为您之前在表单创建中在meta中声明了模型 但我认为最简单的解决方案可能是从清理过的数据创建一个新对象
user=form.cleaned\u data.get('username'))
name=form.cleaned\u data.get('username'))
email=form.cleanned\u data.get('email'))
obj=客户(用户名=用户,姓名=姓名,电子邮件=电子邮件)
obj.save()
form.save()
编辑很抱歉,我错过了用户名是用户对象的部分,编辑回答:
user=form.cleaned\u data.get('username'))
name=form.cleaned\u data.get('username'))
email=form.cleanned\u data.get('email'))
u=表单。保存()
obj=客户(用户名=u,姓名=姓名,电子邮件=电子邮件)
obj.save()
这里发生的是
save()
方法返回我们刚刚保存的对象,因此我们将其分配给u
,并使用它创建新对象。感谢您的回答!我厌倦了您的解决方案,但现在我收到一条错误消息,上面说:无法分配“'test1.2'”:“Customer.username”必须是“User”实例。test1.2是我试图创建的用户。你也知道这个问题的解决方法吗?@JEA我为我的错误道歉,编辑了我的答案。希望它能起作用。没问题,你是个英雄:3非常感谢你,它能起作用!