models.py
from django.db import models
from accounts.models import User
# Create your models here.
class Customer(models.Model):
user_customer = models.OneToOneField(User)
customer_name = models.CharField(max_length=100,blank=True)
phone_no = models.CharField(max_length=100,blank=True)
inserted = models.DateTimeField(auto_now_add=True,null=True,blank=True)
created = models.DateTimeField(auto_now=True,)
views.py
from django.shortcuts import render,redirect
from django.views.generic.edit import CreateView
from accounts.models import User
from accounts.forms import RegisterForm
from .forms import CustomerRegistration
from .models import Customer
def CustomerSignupView(request):
r_form = RegisterForm(request.POST or None)
c_form = CustomerRegistration(request.POST or None)
context = {
"r_form":r_form ,
"c_form":c_form ,
}
if r_form.is_valid() and c_form.is_valid():
instance = r_form.save(commit=False)
instance.is_customer = True
instance.save()
c_form.save()
return redirect("/")
return render(request,"customerregister.html",context)
forms.py
from django import forms
from .models import Customer
class CustomerRegistration(forms.ModelForm):
class Meta:
model = Customer
fields = ('customer_name','phone_no',)
我有两个单独的表格-RegisterationForm(RF)和CustomerRegistrationForm(CRF)。 CRF继承了RF,我想在单个视图中保存两种形式,即CustomerSignupView。
提交表单时会弹出Intergrity错误,并且保存的数据仅来自RegistrationForm。
如何在保持完整性的情况下将两个表单保存到各自的表中。 谢谢。
答案 0 :(得分:0)
您还没有显示表单,但是看起来您必须先设置用户,然后再将客户保存到数据库中。
if r_form.is_valid() and c_form.is_valid():
instance = r_form.save(commit=False)
instance.is_customer = True
instance.save()
customer = c_form.save(commit=False)
customer.user_customer = instance
customer.save()
return redirect("/")
答案 1 :(得分:-1)
在创建客户之前,您必须从accounts.models创建一个用户,如果您的r_form是User的实例,则您的c_form将失败,因为用户要求c_form有效
if r_form.is_valid():
instance = r_form.save(commit=False)
instance.is_customer = True
instance.save()
if c_form.is_valid():
customer = c_form.save(commit=False)
customer.user_customer = instance
customer.save()
return redirect("/")
建议:为什么您不将用户继承给客户,因为您的客户曾经是用户
from accounts.models import User
class Costumer(User):
...
通过这种方式,您可以以一种形式设置Costumer和User,很容易从Costumer中获取数据。