簡體   English   中英

確認后如何提交 Django 表格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM