我正在尝试设计一种表单,以允许用户在运行时筛选数据。 我的模型是:
class Case(models.Model):
country = models.ForeignKey(Country, on_delete=models.CASCADE)
city= models.ForeignKey(City, on_delete=models.CASCADE)
name = models.CharField()
birthdate= models.DateField()
然后,我创建了一个带有两个额外字段 ageFrom 和 ageTo 的模型表单,以便用户可以输入两个值(年龄范围)并使用该年龄范围过滤数据。 这是我的表格
class ReportForm(forms.ModelForm):
#extra fields, which are not in my model, to filter by
ageFrom = forms.IntegerField()
ageTo = forms.IntegerField()
def clean(self):
cleaned_data = super().clean()
ageFrom = cleaned_data.get("ageFrom")
ageTo = cleaned_data.get("ageTo")
if ageFrom > ageTo:
raise forms.ValidationError("some message ")
class Meta:
model = Case
fields = ('country','city', 'gender')
template_name = 'report/custom_report.html'
问题在于 clean 方法无法正常工作。即使是ageFrom > ageTo
,我也不会出错。
其次,我相信有一种更好的方法来实现这种过滤。
您能否帮助我找到按年龄段过滤的最佳方法。还是为了使方法整洁。
答案 0 :(得分:0)
我认为逻辑应该相反。 ageFrom
应该小于ageTo
。另外,您还需要从该方法返回已清除的数据值(这就是您得到错误的原因):
def clean(self):
cleaned_data = super().clean()
ageFrom = cleaned_data.get("ageFrom")
ageTo = cleaned_data.get("ageTo")
if ageFrom < ageTo:
raise forms.ValidationError("some message ")
return cleaned_data