下載和介紹: https://pypi.org/project/django-multiselectfield/
在django ORM的使用中,經常會出現選擇的情況,例如:
class person(odels.Model): sex_type = ((‘male‘,u‘男‘), (‘female‘,u‘女‘)) sex = models.CharField(u"性別", choices=sex_type,max_length=32)
但並不是所有的選擇都是只有一個結果的,例如
class person(odels.Model): language_choices= ((‘chinese‘,u‘漢語‘), (‘english‘,u‘英語‘),(‘french‘,‘法語‘)) language = models.CharField(u"使用語言", choices=language_choices,max_length=32)
很明顯,假如一個人又會漢語,又會英語,那么這個choices就不能上線我們的目的了,那么久可以使用MultiSelectField來實現了,例如
class person(odels.Model): language_choices= ((‘chinese‘,u‘漢語‘), (‘english‘,u‘英語‘),(‘french‘,‘法語‘)) language = MultiSelectField(u"使用語言",choices=language_choices)
需要注意的幾點:
1:MultiSelectField不支持list_display,如果在list_display中添加MultiSelectField的項就會出現報錯,所以當你想在admin頁管理你的數據庫資料時,不能在查看頁面查看到MultiSelectField的項的內容。
2:當你想使用form直接在前端生成編輯或查看數據庫內容的頁面時,MultiSelectField的項不能直接顯示出來,而是需要進行特殊的處理,其格式如下(其中provider表示query對象,field表示MultiSelectField項)
{% for value, text in providers.field.choices %} <div class="ui slider checkbox"> <input id="id_providers_{{ forloop.counter0 }}" name="{{ form.providers.name }}" type="checkbox" value="{{ value }}"{% if value in checked_providers %} checked="checked"{% endif %}> <label>{{ text }}</label> </div> {% endfor %}
3:在使用filter對MultiSelectField項進行查詢時需要注意MultiSelectField項在數據庫內存的是一個列表類型的數據,如果查詢選擇的項和你的查詢條件完全相同的數據直接使用
models.Person.objects.filter(language=[‘chinese‘])
但如果想要filter到所有選擇了其中一個選項的數據(包括只選擇了該選項的數據和同時選擇了該選項和其他選項的數據),直接使用django提供的查詢方法就不行了,那么可以使用Q語句來實現查詢,其形式為()
models.persom.objects.filter( Q(language=‘chinese‘)|Q(language__startswith=‘chinese,‘)|Q(language__endswith=‘,chinese‘)|Q(language__contains = ‘,chinese,‘)
django ORM中的復選MultiSelectField的使用
原文地址:http://www.mamicode.com/info-detail-1738920.html