将表单中的数据保存到 2 个模型中
Save data from form into 2 models
我正在使用 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 = 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']
报名View.py
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' 对象没有属性 '_meta'
感谢您的帮助!
编辑:
我尝试了@Moha369 的解决方案,但现在我收到一条错误消息:
无法分配“'test1.2'”:“Customer.username”必须是“用户”实例
从技术上讲这是不可能的,因为您之前在表单创建的元数据中声明了模型。
但我认为最简单的解决方案可能是从清理后的数据创建一个新对象。
user = form.cleaned_data.get('username')
name = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
obj = Customer(username = user, name = name, email = email)
obj.save()
form.save()
编辑 很抱歉我错过了用户名是用户对象的部分,已编辑答案:
user = form.cleaned_data.get('username')
name = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
u = form.save()
obj = Customer(username = u, name = name, email = email)
obj.save()
这里发生的事情是 save()
方法 returns 我们刚刚保存的对象,所以我们将它分配给 u
并用它来创建新对象。
我正在使用 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 = 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']
报名View.py
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' 对象没有属性 '_meta'
感谢您的帮助!
编辑: 我尝试了@Moha369 的解决方案,但现在我收到一条错误消息: 无法分配“'test1.2'”:“Customer.username”必须是“用户”实例
从技术上讲这是不可能的,因为您之前在表单创建的元数据中声明了模型。
但我认为最简单的解决方案可能是从清理后的数据创建一个新对象。
user = form.cleaned_data.get('username')
name = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
obj = Customer(username = user, name = name, email = email)
obj.save()
form.save()
编辑 很抱歉我错过了用户名是用户对象的部分,已编辑答案:
user = form.cleaned_data.get('username')
name = form.cleaned_data.get('username')
email = form.cleaned_data.get('email')
u = form.save()
obj = Customer(username = u, name = name, email = email)
obj.save()
这里发生的事情是 save()
方法 returns 我们刚刚保存的对象,所以我们将它分配给 u
并用它来创建新对象。