大家好,我的结帐页面有一些字段和另外两个用于条带身份验证的字段。当我提交我的表单时,它没有被添加到数据库中,而是条纹注册付款。我是否需要删除这两个字段才能使用表单(request.POST) 我的模型
class ShippingAddress(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(max_length=50, null=True)
city = models.TextField(max_length=50, null=True)
country = models.TextField(max_length=50, null=True)
zip_code = models.TextField(max_length=15, null=True)
phone = models.TextField(max_length=10, null=True)
email = models.EmailField(max_length=30, null=True)
adress = models.TextField(max_length=100, null=True)
transaction_id= models.TextField(max_length=100,null=True)
invoice = models.BooleanField(default=False, blank=True, null=True)
invoiceRecipient = models.TextField(max_length=50, null=True, blank=True)
invoiceAdress = models.TextField(max_length=50, null=True, blank=True)
invoiceZip = models.TextField(max_length=15, null=True, blank=True)
invoiceCity = models.TextField(max_length=50, null=True, blank=True)
invoiceNip = models.TextField(max_length=15, null=True, blank=True)
processed = models.BooleanField(default=False, blank=True, null=True)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.adress)
forms.py
class CustomerShipp(ModelForm):
invoice = forms.BooleanField(widget=forms.CheckboxInput(attrs={'class':'checkboxInvoice',}),required=False)
class Meta:
model = ShippingAddress
fields = [ 'city', 'country','zip_code','adress',
'phone','email','recipient','invoice','invoiceRecipient',
'invoiceAdress','invoiceZip','invoiceCity','invoiceNip','transaction_id','customer','order']
exclude =['processed', 'date_added']
widgets ={
'city' :forms.TextInput(attrs={'class':'shippForm'}),
'country' :forms.TextInput(attrs={'class':'shippForm'}),
'zip_code' :forms.TextInput(attrs={'class':'shippForm'}),
'adress' :forms.TextInput(attrs={'class':'shippForm'}),
'email' :forms.TextInput(attrs={'class':'shippForm'}),
'recipient' :forms.TextInput(attrs={'class':'shippForm'}),
'phone' :forms.TextInput(attrs={'class':'shippForm'}),
'invoiceRecipient':forms.TextInput(attrs={'class':'shippForm'}),
'invoiceAdress' :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'}),
'customer' :forms.TextInput(attrs={'type':'hidden'}),
'order' :forms.TextInput(attrs={'type':'hidden'}),
}
我的观点
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 forms.is_valid():
adding = forms.save(commit=False)
adding.customer = customerOnWebsite
adding.order = order
adding.transaction_id = transaction_id
adding.save()
return render(request,'policy.html')
查询字典
模板
<form action="{% url 'processOrder' %}" method="post" id="payment-form">
{% csrf_token %}
<div class="recipientAdressWrapper">
<div class="form-group">
{{ forms.recipient }}
</div>
<div class="form-group">
{{ forms.adress }}
</div>
<div class="form-group">
{{ forms.zip_code }}
</div>
<div class="form-group">
{{ forms.city }}
</div>
<div class="form-group">
{{ forms.country }}
</div>
<div class="form-group">
{{ forms.email }}
</div>
<div class="form-group">
{{ forms.phone }}
</div>
<div class="invoiceWrapper">
<div class="invoiceToggle">
{{ forms.invoice }}
</div>
<div class="invoiceFromWrapper">
<div class="form-group">
{{ forms.invoiceRecipient }}
</div>
<div class="form-group">
{{ forms.invoiceAdress }}
</div>
<div class="form-group">
{{ forms.invoiceZip }}
</div>
<div class="form-group">
{{ forms.invoiceCity }}
</div>
<div class="form-group">
{{ forms.invoiceNip }}
</div>
</div>
</div>
</div>
<div class="widthBtnCheckout">
<button type="submit" href="" class="btn btn-sm animated-button thar-three">{% trans "Zakończ i zapłać" %}</button></div>
</form>
最后两个以支付开头的字段是通过 stripe.js 添加的
答案 0 :(得分:0)
首先,您需要在视图中在表单之后实际重定向,并创建一个表单实例如果 GET
请求并通过字典将其发送到模板:
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
答案 1 :(得分:-1)
所以我做了 request.post 的浅拷贝,然后从通过 stripe.js 身份验证生成的所述拷贝字段中弹出,并且我在表单 is_valid 之前移动了添加事务。我不知道为什么,但现在可以了
customerOnWebsite = request.user.customer
values = request.POST.copy()
values['transaction_id'] = transaction_id
values.pop('payment_method_id')
values.pop('payment_intent_id')
print(values)
forms = CustomerShipp(values)
print(forms.is_valid())
if forms.is_valid():
adding = forms.save(commit=False)
adding.customer = customerOnWebsite
adding.order = order
adding.save()