次のセットアップで django-filters の基本的な例を適用しました: models.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)
ビュー.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 %}
フォーム.py:
class ShopperForm(ModelForm):
class Meta:
model = Shopper
('','---------')
フィルタリング中に django-filters がそれを表示し、そのフィールドが指定されないようにするために、空の選択肢が追加されました。ただし、非必須HighestSchool
フィールドの場合、作成シナリオでモデルを使用する場合に 2 回表示されます。つまり、非ModelForm.
必須フィールド('','---------')
にリストされるべきではありません。次に、フィルタリング中に empty_label を選択できません...
ビューの作成中に 1 つの empty_label をリストし、フィルタリング中に必須フィールドと非必須フィールドの両方を未指定のままにしておくことで、これをどのように解決できますか?