我想在将表单保存到数据库之前预览用户提交的所有数据。我写了下面的代码,但它没有提交,也没有显示错误。即使我在代码中插入print以打印输入的数据,它也不会打印任何数据
因此,逻辑是这样的,当用户添加数据并单击“确认订单”时,他/她将被带到“preview.html”,其中将显示提交的数据。当用户满意时,他/她将单击保存按钮。preview.html中的表单操作是/add_buy_order/”
观点
@login_required
def add_buy_order(request):
newbc = None
template_name = 'ctrade/buycurrency.html'
if request.method=="POST":
form=BuyCurForm(request.POST)
if form.is_valid():
data=form.cleaned_data
requested_amount_needed = request.POST.get('amount_needed')
deck_am_needed = Decimal(requested_amount_needed)
fixed_amount = Decimal('999.0')
requested_amount_to_pay = request.POST.get('amount_to_pay')
requested_disc_code = request.POST.get('discount_code')
requested_disc_value = request.POST.get('discount_value')
requested_cur_one = request.POST.get('cur_address')
requested_cur_two = request.POST.get('cur_address_two')
requested_bank = request.POST.get('deaccount')
tapde = DEAccount.objects.get(bank_name= requested_bank)
if not str(requested_cur_one) == str(requested_cur_two):
messages.info(request, 'Address to fund mismatch. Cross-check again')
return redirect('add_buy_order')
if '_preview' in request.POST:
newbc=BuyCur(
buyer=request.user,
cur_type = data['cur_type'],
amount_needed = data['amount_needed'],
deaccount = tapde,
amount_to_pay = data['amount_to_pay'],
cur_address = data['cur_address'],
cur_address_two = data['cur_address_two'],
rate_bought = data['rate_bought'],
cur_note = data['cur_note'],
pub_date=datetime.datetime.now(),
modified_date = datetime.datetime.now(),
discount_code = data['discount_code']
)
print newbc.buyer, newbc.cur_type, newbc.amount_needed, newbc.deaccount, newbc.amount_to_pay, newbc.cur_address,
newbc.cur_address_two, newbc.rate_bought, newbc.cur_note, newbc.pub_date, newbc.modified_date, newbc.discount_code
return render(request, 'ctrade/preview.html',{'newbc':newbc})
elif '_save' in request.POST:
newbc=BuyCur(
buyer=request.user,
cur_type = data['cur_type'],
amount_needed = data['amount_needed'],
deaccount = tapde,
amount_to_pay = data['amount_to_pay'],
cur_address = data['cur_address'],
cur_address_two = requested_cur_two,
rate_bought = data['rate_bought'],
cur_note = data['cur_note'],
pub_date=datetime.datetime.now(),
modified_date = datetime.datetime.now(),
discount_code = data['discount_code'])
newbc.save()
return render(request, 'ctrade/afterbuy.html', {'newbc':newbc})
else:
form=BuyCurForm()
return render(request, template_name,{'form':form,'newbc':newbc})
形式
class BuyCurForm(forms.ModelForm):
cur_type = forms.ModelChoiceField(queryset = CurrencyTrade.objects.all(), to_field_name = "we_sell")
deaccount = forms.ModelChoiceField(queryset = DEAccount.objects.all(), to_field_name = "bank_name")
amount_needed = forms.DecimalField(widget= forms.TextInput, max_digits=10, decimal_places=1, initial=0.0 ,required = True)
amount_to_pay = forms.DecimalField(widget= forms.TextInput, max_digits=10, decimal_places=2, initial=0.00 ,required = True)
rate_bought = forms.IntegerField()
def __init__(self, *args, **kwargs):
super(BuyCurForm, self).__init__(*args, **kwargs)
self.fields['amount_to_pay'].widget.attrs['readonly'] = True
self.fields['rate_bought'].widget.attrs['readonly'] = True
class Meta:
model = BuyCur
fields = ['cur_type','amount_needed','amount_to_pay','rate_bought','deaccount','cur_address','cur_address_two','cur_note','discount_code']
模板
<form method="POST" action="">
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }} {{ field }}
{% if field.help_text %}
<p class="help">{{ field.help_text|safe }}</p>
{% endif %}
</div>
{% endfor %}
<input type="submit" name="_preview" value="Confirm Order">
<input type="hidden" name="next" value="{{ next }}">
</form>
我错过了什么?还是有更好的办法
有两种方法可以做到这一点
1)如果您想要django消息,那么您的模板应该包含以下代码
template.html
2)如果要使用
form.errors
,则不应像当前那样发送表单的新实例。您应该发送无效的表单实例views.py
正确的视图.py
相关问题 更多 >
编程相关推荐