【发布时间】:2021-07-25 16:49:06
【问题描述】:
我有这个数据库表:
models.py
class Payment(models.Model):
date = models.DateField(blank=False,verbose_name="Data")
description = models.CharField(max_length = 300,blank=False,verbose_name="Descrizione")
course_subscription = models.ForeignKey(CourseSubscription,null=True,on_delete=models.CASCADE,verbose_name="Sottoscrizione Corso")
payment_method = models.CharField(max_length = 4,blank=False,verbose_name="Modalità di pagamento",choices=PAYMENTS)
value = models.DecimalField(max_digits=7, decimal_places=2,blank=False,verbose_name="Importo")
receipt= models.FileField(blank=False,verbose_name="Ricevuta")
如何在模型或表单中添加一个约束,仅当日期比最近的记录更新时才允许插入新的付款?换句话说,我希望新的付款总是比上次插入的日期更新。
我试过了:
forms.py
class AddPaymentForm(forms.Form):
def __init__(self, max_value, min_date, *args, **kwargs):
super(AddPaymentForm, self).__init__(*args, **kwargs)
self.fields['value'] = forms.DecimalField(
max_digits=7,
decimal_places=2,
required=True,
label="Importo",
min_value=0.01,
max_value=max_value,
help_text= f"Valore Massimo: {max_value}",
widget = forms.NumberInput()
)
self.fields['date'] = forms.DateField(
required=True,
label="Data",
min_value=min_date,
help_text= f"Data minima: {min_date}",
widget=forms.TextInput(
attrs={'type': 'date'}
)
)
....
和 视图.py
...
payments = Payment.objects.all().order_by('-date')
initial = {
'date': datetime.date.today().strftime("%Y-%m-%d"),
'member':member,
'description': description,
'value': 1.00,
'subscription_type' :subscription_type,
'subscription_id' :subscription_id
}
if len(payments)>0 :
min_date = payments[0].date.strftime("%Y-%m-%d")
initial["date"] = min_date
else:
min_date = None
form = AddPaymentForm(
initial= initial,
max_value = remaining_fee,
min_date = min_date
)
...
这种方式适用于 'value' 字段,但 forms.DateField 没有“min_value”属性。
【问题讨论】:
标签: django django-forms datefield