【发布时间】:2013-08-06 21:47:20
【问题描述】:
我已经使用以下设置应用了 django-filters 的基本示例: 模型.py
class Shopper(models.Model):
FirstName = models.CharField(max_length=30)
LastName = models.CharField(max_length=30)
Gender_CHOICES = (
('','---------'),
('Male','Male'),
('Female','Female'),
)
Gender = models.CharField(max_length=6, choices=Gender_CHOICES, default=None)
School_CHOICES = (
('','---------'),
(u'1', 'Primary school'),
(u'2', 'High School'),
(u'3', 'Apprenticeship'),
(u'4', 'BsC'),
(u'5', 'MsC'),
(u'6', 'MBA'),
(u'7', 'PhD'),
)
HighestSchool = models.CharField(max_length=40, blank = True, choices = School_CHOICES,default=None)
views.py:
def shopperlist(request):
f = ShopperFilter(request.GET, queryset=Shopper.objects.all())
return render(request,'mysapp/emailcampaign.html', {'filter': f})
urls.py:
url(r'^emailcampaign/$', views.shopperlist, name='EmailCampaign'),
模板:
{% extends "basewlogout.html" %}
{% block content %}
{% csrf_token %}
<form action="" method="get">
{{ filter.form.as_p }}
<input type="submit" name="Filter" value="Filter" />
</form>
{% for obj in filter %}
<li>{{ obj.FirstName }} {{ obj.LastName }} {{ obj.Email }}</li>
{% endfor %}
<a href="{% url 'UserLogin' %}">
<p> Return to home page. </p> </a>
{% endblock %}
forms.py:
class ShopperForm(ModelForm):
class Meta:
model = Shopper
添加了空选项 ('','---------') 以确保 django-filters 将在过滤期间显示它并让该字段未指定。但是,对于非强制性的 HighestSchool 字段,当在带有 ModelForm. 的创建场景中使用模型时,它会显示两次,即('','---------') 不应列为非必填字段。那么在过滤时无法选择empty_label...
如何通过在创建视图期间列出一个 empty_label 来解决此问题,并有可能在过滤期间未指定必填字段和非必填字段?
【问题讨论】:
-
您在
HighestSchool上有blank=True,因此您无需手动添加('','---------'),它将在稍后自动添加。这就是您看到双空标签的原因。 -
没错,但是,如果我将其删除并转到过滤器,则没有空选项。但是,我确实希望在过滤中有空选项,并且不想指定某个学校选项。
标签: python django django-filters