我是Django的初学者,正在做一个学习项目,这是一个预订系统。任何人都可以推荐我一个开源的Django项目,我可以检查源代码的最佳实践。提前致谢
当我使用下面的代码时,get方法得到" on"或"关闭"。怎么可能"真" /"错误"?
Model.py
class Mymodel(models.Model):
...
is_xxx_approved = models.BooleanField(default=False,blank=False,null=False)
is_contracted_by_yy= models.BooleanField(default=False,blank=False,null=False)
is_zz_approved = models.BooleanField(default=False,blank=False,null=False)
Filter.py
class MymodelFilter(django_filters.FilterSet):
class Meta:
model = Mymodel
fields = ['is_xxx_approved', 'is_contracted_by_yy', 'is_zz_approved']
exclude = [
'name',
'address',
'phone',
'email',]
filter_overrides = {
models.BooleanField: {
'filter_class': django_filters.BooleanFilter,
'extra': lambda f: {
'widget': forms.CheckboxInput,
},
},
}
模板
<div class="filter_index">
{% with field=filter.form.is_xxx_approved %}
{{ field.label_tag }}
{{ field }}
{% endwith %}
</div>
<div class="filter_index">
{% with field=filter.form.is_contracted_by_yy %}
{{ field.label_tag }}
{{ field }}
{% endwith %}
</div>
<div class="filter_index">
{% with field=filter.form.is_zz_approved %}
{{ field.label_tag }}
{{ field }}
{% endwith %}
</div>
答案 0 :(得分:1)
我被问到并不完全清楚,但我会说在使用过滤器时通常应该避免使用CheckboxInput
。简而言之,他们总是评估为true / false,并且无法为过滤器字段提交空值。例如,如果您提交一个空表单,则可以有效地构造此查询集:
Mymodel.objects \
.filter(is_xxx_approved=False) \
.filter(is_contracted_by_yy=False) \
.filter(is_zz_approved=False)
虽然您可能有理由期望构建此查询集:
Mymodel.objects.all()
同样,这特别是CheckboxInput
的问题,并且无法表示空值。相反,您应该使用默认的Select
窗口小部件,或切换到RadioSelect
。
此外,同时使用Meta.fields
和Meta.exclude
选项也是多余的。我建议使用Meta.fields
。