[英]How can I Submit Django Form after Confirmation
我正在開發一個儲蓄應用程序,我希望用戶在顯示帶有消息的確認表單后添加客戶存款。 我已盡我所能,但我意識到存款 function 工作正常並顯示確認消息,但在確認表單上單擊確認時無法提交存款表單,而是系統將我再次重定向回存款表單; 在輸入表單上顯示金額字段不能為空的錯誤。
Model 代碼:
class Deposit(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE, null=True)
acct = models.CharField(max_length=6, null=True)
staff = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
deposit_amount = models.PositiveIntegerField(null=True)
date = models.DateTimeField(auto_now_add=True)
def get_absolute_url(self):
return reverse('create_account', args=[self.id])
def __str__(self):
return f'{self.customer} Deposited {self.deposit_amount} by {self.staff.username}'
表格代碼:
class CustomerDepositForm(forms.ModelForm):
class Meta:
model = Deposit
fields = ['deposit_amount']
查看代碼:
def customer_deposit(request, id):
context = {}
form = CustomerDepositForm(request.POST or None)
#Set Page Title
page_title = "Customer Deposit"
#Get Current Date
current_date = datetime.now().date()
#Get Current Month Name from Calendar
current_month_name = calendar.month_name[date.today().month]
try:
#Check the Customer ID in DB
customer = Customer.objects.get(id=id)
#Customer Account
acct = customer.account_number
except Customer.DoesNotExist:
messages.error(request, 'Customer Does Not Exist')
return redirect('customer_create')
else:
#Get the Customer total deposit
deposit = Deposit.objects.filter(customer_id = id).aggregate(total=Sum('deposit_amount')
)['total'] or Decimal()
if request.method == 'POST':
#Deposit Form
form = CustomerDepositForm(request.POST or None)
if form.is_valid():
amount = form.cleaned_data['deposit_amount']
context.update( {
'deposit':deposit,
'page_title':page_title,
'customer':customer,
'current_date':current_date,
'current_month_name':current_month_name,
'form':form,
'amount':amount,
'acct':acct,
})
return render(request, 'dashboard/deposit_approval_form.html', context)
else:
form = CustomerDepositForm()
context = {
'deposit':deposit,
'page_title':page_title,
'customer':customer,
'current_date':current_date,
'current_month_name':current_month_name,
'form':form,
'acct':acct,
}
return render(request, 'dashboard/deposit.html', context)
def approve_deposit(request, id):
user = request.user
form = CustomerDepositForm(request.POST or None)
amount = form.cleaned_data['deposit_amount'].value()
try:
#Check the Customer ID in DB
customer = Customer.objects.get(id=id)
#Customer Account
acct = customer.account_number
except Customer.DoesNotExist:
messages.error(request, 'Customer Does Not Exist')
return redirect('customer_create')
else:
if request.method == 'POST':
#Create Customer Deposit
credit_acct = Deposit.objects.create(customer=customer, acct=acct, staff=user, deposit_amount=amount)
credit_acct.save()
messages.success(request, f'N{amount} Credited for Account {acct} Successfully.')
return redirect('deposit-slip')
else:
form = CustomerDepositForm()
return render(request, 'dashboard/deposit_approval_form.html')
存款批准模板代碼:
<form method="POST">
{% csrf_token %}
<a class="btn btn-secondary" href="{% url 'create-deposit' customer.id %}">Cancel</a>
<input class="btn btn-danger" type="submit" value="Confirm">
</form>
有人應該幫助實現這一目標的最佳方式。 謝謝
您必須使用null=True, blank=True
對於您未在表單中使用的字段。 然后再次進行遷移
null = True, blank = False
表示該字段在 DATABASE 中可以為空,但不能在 FORM 中,反之亦然。
根據我的觀察,您沒有在try block
中提交表單,您只是在else block
中提交表單。 表單永遠不會提交,因為try block
始終為 true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.