2017-05-11 14 views
0

私は正しい名前を使用していないことを99%確信していますが、私はブログのアーカイブメニューと同様に見え、動作するメニューを作成する方法についての情報を見つけようとしています正しい名前はすでに私が正しい場所で見るのを助けるでしょう)。djangoの折りたたみ可能な(ブログ)タイプのメニュー

enter image description here

私の意図は、このようなメニューを作成することですが、私のデータベースから、その後使用してフィールドをどこ虚:具体的には、トップレベルのフィールドをクリックし、すべてのそれの子を取得する機能は、以下の例を参照してください次のようにエントリは次のようになります。

class foo(models.Model): 
    a = models.CharField(max_length=200) 
    b = models.CharField(max_length=200) 
    c = models.CharField(max_length=200) 
メニューより(例では、今年のように)トップレベルとして aのすべての一意の値を示すであろうし、それをクリックすると、中の月のように(すべてのユニークな bの値を示すだろう

例)をクリックすると、個々の対応するentr ies。

djangoを使用して同様の概念がどのように作成されるかについては、このようなメニューの正しい名前と、可能であればいくつかのドキュメント/ガイドを参考にしてください。

+2

あなたの 'foo'モデルに' DateTimeField'が必要です。そして、あなたのquerysetを年と月でグループ化してください。 – Tushortz

+0

@Tushortz私はそれらをテキスト文字列でグループ化しようとしています。私が作成したい)。たとえば、トップレベルのメニュー項目として 'acid'や' base'などです。 –

+1

この場合、モデルフィールドをループして、グループに使用するテキスト文字列を表すフィールドのユニークなものを取得します。 ' – Tushortz

答えて

0

私はいくつかのブートストラップとdjangoを使用してこれを動作させることができました。次のようにクエリセットのリストであるように

ビューがenzyme_activity_type=types.values()[0]が、私は好きではないだけビットであることで(生成されました:

class IndexView(generic.ListView): 
    template_name = 'gts/index.html' 
    context_object_name = 'latest_enzyme_list' 

    def get_queryset(self): 
     try: 
      resultList = [] 
      for types in Enzymes.objects.values('enzyme_activity_type').distinct():     
       resultList.append(Enzymes.objects.filter(enzyme_activity_type=types.values()[0])) 
      return resultList 
     except: 
      return Enzymes.objects.none() 

HTMLテンプレートをクエリセットとブートストラップを使用して(ブートストラップおよびJavaScriptに関連するビットbase.htmlである):

{% extends 'base.html' %} 

{% block body %} 

<div class="section" id="s-module-django.db.models.fields"> 
    <h1 class="page-header text-primary">Glycoenzymes for Bioindustries</h1> 
    <div> 
     <p>Complete list of all enzymes in the database:</p> 
    </div> 

    {% if latest_enzyme_list %} 
     <ul> 
     {% for enzyme_type in latest_enzyme_list %} 
      <div class="panel-heading"> 
       <button type="button" class="btn btn-info" data-toggle="collapse" href="#{{enzyme_type.first.enzyme_activity_type|cut:" "}}"> 
        {{enzyme_type.first.enzyme_activity_type}} 
       </button> 
      </div> 
      <div id="{{enzyme_type.first.enzyme_activity_type|cut:" "}}" class="panel-collapse collapse"> 
      {% for enzyme in enzyme_type %} 
       <div><a href="{% url 'gts:detail' enzyme.id %}"><li>{{ enzyme.barcode }}</li></a></div> 
      {% endfor %} 
      </div> 
     {% endfor %} 
     </ul> 
    {% else %} 
     <p>No enzymes are available.</p> 
    {% endif %} 
</div> 

{% endblock %} 

base.htmlから抜粋(ブートストラップ封入を例示するために):

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}"/> 
</head> 
<body> 
    {% block body %} 
    {% endblock %} 

<!------- Bootstrap + JQuery JS---------> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
<script src="{% static 'scripts/bootstrap.min.js' %}"></script> 

</body> 
</html> 

これは(最初の項目「有効」で)、次の画像のような結果になります。私は、固定の方法は、正しいDjangoのプログラミングであることをどのような方法で変更する必要がある場合はコメントを投稿してください

enter image description here

関連する問題