I have a form update page. I had originally just been using date fields, but was asked by a user to include a date picker, so I moved to the code below. Now each time I update a date field (say payment 3 date), it updates ok, but it also deletes the other date fields. Any ideas as to why? I’m new to the DateInput() widgets.
In views.py:
def ParticipantPayments(request, pk):
page_heading = "Update Participant's Payments"
order = Order.objects.get(pk=pk)
payment = ParticipantPayment.objects.get(customer=order.customer)
customer = int(order.customer.id)
firstname = payment.customer.first_name
lastname = payment.customer.last_name
form = UpdatePaymentForm(instance=payment)
if request.method == 'POST':
form = UpdatePaymentForm(request.POST, request.FILES, instance=payment)
if form.is_valid():
form.save()
messages.info(request, 'Your Form has been successfully submitted. ')
return redirect('finance_participants')
context = {'form':form,'customer':customer,'page_heading': page_heading, 'order':order,
'firstname':firstname, 'lastname':lastname}
return render(request, 'accounts/part_payments.html', context)
In models.py file:
class ParticipantPayment(models.Model):
#other code not relevant
customer = models.ForeignKey(Customer, on_delete= models.CASCADE, null = True)
fee = models.IntegerField(verbose_name = "Registration Fee", blank=False, default = 750)
currency = models.CharField(verbose_name = "Currency", max_length=10, null=True, choices=MONEY,default='GBP')
crowd_fund = models.DecimalField(verbose_name = "Crowd Fund Amount", max_digits=5,decimal_places=2, default = 0)
ir_discount = models.DecimalField(verbose_name = "Euro Discount Amount", max_digits=5,decimal_places=2, default = 0)
bursary = models.DecimalField(verbose_name = "Bursary Amount", max_digits=5,decimal_places=2, default = 0)
payment_1_amount = models.DecimalField(max_digits=5, decimal_places=2, default = 0)
payment_1_date = models.DateField(null=True,blank=True)
payment_2_amount = models.DecimalField(max_digits=5, decimal_places=2, default = 0)
payment_2_date = models.DateField(null=True,blank=True)
payment_3_amount = models.DecimalField(max_digits=5, decimal_places=2, default = 0)
payment_3_date = models.DateField(null=True,blank=True)
payment_4_amount = models.DecimalField(max_digits=5, decimal_places=2, default = 0, null=True,blank=True)
payment_4_date = models.DateField(null=True,blank=True)
payment_5_amount = models.DecimalField(max_digits=5, decimal_places=2, default = 0, null=True,blank=True)
payment_5_date = models.DateField(null=True,blank=True)
payment_6_amount = models.DecimalField(max_digits=5, decimal_places=2, default = 0, null=True,blank=True)
payment_6_date = models.DateField(null=True,blank=True)
note = models.CharField(max_length=1000, null=True,blank=True)
refund_amount = models.DecimalField(max_digits=5, decimal_places=2, default = 0)
refund_date = models.DateField(null=True,blank=True)
def fee_owing(self):
return self.fee - self.crowd_fund - self.ir_discount- self.bursary
def total_paid(self):
return self.crowd_fund + self.ir_discount + self.bursary + self.payment_1_amount + self.payment_2_amount + self.payment_3_amount + self.payment_4_amount + self.payment_5_amount + self.payment_6_amount - self.refund_amount
def part_balance(self):
return self.fee - self.crowd_fund - self.ir_discount - self.bursary - self.payment_1_amount - self.payment_2_amount - self.payment_3_amount - self.payment_4_amount - self.payment_5_amount - self.payment_6_amount + self.refund_amount
def __str__(self):
return self.customer.last_name + ", " + self.customer.first_name
In forms.py file:
class UpdatePaymentForm(ModelForm):
class Meta:
model = ParticipantPayment
fields ='__all__'
exclude = ['customer']
widgets = {'payment_1_date' : DateInput(),
'payment_2_date' : DateInput(),
'payment_3_date' : DateInput(),
'payment_4_date' : DateInput(),
'payment_5_date' : DateInput(),
'payment_6_date' : DateInput(),
}
I am completely stumped and would appreciate any suggestions here.