django ORM中的復選MultiSelectField的使用


  下載和介紹: 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM