Django表单未提交到数据库

Django表单未提交到数据库,django,django-models,django-forms,Django,Django Models,Django Forms,嗨,伙计们,我有一个结帐页面,有一些字段和两个附加的一个用于条带身份验证。当我提交我的表格时,它不会被添加到数据库中,而是会注册付款。我是否需要删除这两个字段才能使用表单(request.POST) 我的车型 类发货地址(models.Model): customer=models.ForeignKey(customer,on_delete=models.SET_NULL,blank=True,NULL=True) order=models.ForeignKey(order,on_delete=

嗨,伙计们,我有一个结帐页面,有一些字段和两个附加的一个用于条带身份验证。当我提交我的表格时,它不会被添加到数据库中,而是会注册付款。我是否需要删除这两个字段才能使用表单(request.POST) 我的车型

类发货地址(models.Model):
customer=models.ForeignKey(customer,on_delete=models.SET_NULL,blank=True,NULL=True)
order=models.ForeignKey(order,on_delete=models.SET_NULL,blank=True,NULL=True)
recipient=models.TextField(最大长度=50,null=True)
city=models.TextField(最大长度=50,null=True)
country=models.TextField(最大长度=50,null=True)
zip_code=models.TextField(最大长度=15,null=True)
phone=models.TextField(最大长度=10,null=True)
email=models.EmailField(最大长度=30,null=True)
Address=models.TextField(最大长度=100,null=True)
事务id=models.TextField(最大长度=100,null=True)
发票=models.BooleanField(默认值=False,空白值=True,空值=True)
invoiceRecipient=models.TextField(最大长度=50,null=True,blank=True)
InvoiceAddress=models.TextField(最大长度=50,null=True,blank=True)
invoiceZip=models.TextField(最大长度=15,null=True,blank=True)
invoiceCity=models.TextField(最大长度=50,null=True,blank=True)
invoiceNip=models.TextField(最大长度=15,null=True,blank=True)
processed=models.BooleanField(默认值=False,空白值=True,空值=True)
date\u added=models.DateTimeField(auto\u now\u add=True)
定义(自我):
返回str(自我地址)
forms.py

class CustomerShip(模型格式):
发票=forms.BooleanField(小部件=forms.CheckboxInput(attrs={'class':'checkboxInvoice',}),必需=False)
类元:
型号=发货地址
字段=[‘城市’、‘国家’、‘邮政编码’、‘地址’,
“电话”、“电子邮件”、“收件人”、“发票”、“发票收件人”,
“发票地址”、“发票邮编”、“发票城市”、“发票地址”、“交易id”、“客户”、“订单”]
排除=['已处理','添加日期']
小部件={
“城市”:forms.TextInput(attrs={'class':'shippForm'}),
'country':forms.TextInput(attrs={'class':'shippForm'}),
'邮政编码':forms.TextInput(attrs={'class':'shippForm'}),
“地址”:forms.TextInput(attrs={'class':'shippForm'}),
“电子邮件”:forms.TextInput(attrs={'class':'shippForm'}),
“收件人”:forms.TextInput(attrs={'class':'shippForm'}),
'phone':forms.TextInput(attrs={'class':'shippForm'}),
“invoiceRecipient”:forms.TextInput(attrs={'class':'shippForm'}),
'InvoiceAddress':forms.TextInput(attrs={'class':'shippForm'}),
'invoiceZip':forms.TextInput(attrs={'class':'shippForm'}),
'invoiceCity':forms.TextInput(attrs={'class':'shippForm'}),
'invoiceNip':forms.TextInput(attrs={'class':'shippForm'}),
'transaction_id':forms.TextInput(attrs={'type':'hidden'}),
“客户”:forms.TextInput(attrs={'type':'hidden'}),
“顺序”:forms.TextInput(attrs={'type':'hidden'}),
}
我的观点

from.forms导入*
def processOrder(请求):
如果request.method==“POST”和request.user.u经过身份验证:
订单,已创建=订单.对象.获取或创建(客户=客户,完成=假)
order.complete=True
order.transaction\u id=事务\u id
order.save()
事务\u id=datetime.datetime.now().timestamp()
customerOnWebsite=request.user.customer
forms=CustomerShip(request.POST)
打印(请求.发布)
打印(forms.is_valid())
如果forms.is_有效():
adding=forms.save(commit=False)
adding.customer=customer网站
adding.order=订单
adding.transaction\u id=事务\u id
添加.save()
返回呈现(请求'policy.html')
QueryDict

模板


{%csrf_令牌%}
{{forms.recipient}
{{forms.address}
{{forms.zip_code}
{{forms.city}
{{forms.country}
{{forms.email}
{{forms.phone}
{{forms.invoice}
{{forms.invoiceRecipient}
{{forms.invoiceAddress}
{{forms.invoiceZip}
{{forms.invoiceCity}
{{forms.invoiceNip}
{%trans“Zakończ i zapłać”}

最后两个以支付开始的字段是通过stripe.js添加的。首先,您需要在视图中的表单之后实际重定向,如果
获取
请求并通过字典将其发送到模板,还需要创建一个表单实例:

from .forms import *


def processOrder(request):
    if request.method == "POST" and request.user.is_authenticated:
         order, created = Order.objects.get_or_create(customer=customer, complete=False)
         order.complete = True
         order.transaction_id = transaction_id
         order.save()

         transaction_id = datetime.datetime.now().timestamp()
         customerOnWebsite = request.user.customer
         forms = CustomerShipp(request.POST)
         print(request.POST)
         print(forms.is_valid())
         if form.is_valid():
           adding = forms.save(commit=False)
           adding.customer = customerOnWebsite
           adding.order    = order
           adding.transaction_id = transaction_id
           adding.save()
           return redirect('home') # or somewhere else
      else:
          fors = CustomerShipp() # define a form in a GET request for display
      return render(request,'policy.html', {'form': form}) # render the form as well 

所以我做了request.post的浅层复制,然后从通过stripe.js身份验证生成的复制字段中弹出,并在表单有效之前添加事务。我不知道为什么,但现在它起作用了

customerOnWebsite=request.user.customer
值=request.POST.copy()
值['transaction\u id']=事务\u id
values.pop('payment\u method\u id'))
values.pop('payment\u intent\u id'))
打印(值)
forms=CustomerShip(值)
打印(forms.is_valid())
如果forms.is_有效():
adding=forms.save(commit=False)
adding.customer=customer网站
adding.order=订单
添加.save()

您能出示您的模板代码吗?是的,我已经添加了。你知道为什么表格无效吗?是吗