django genericviewで重複をなくして表示
django 1.8.4 python 3.4.1
次のようなモデルで name に重複した情報を入力することは可能だが、重複無しで表示したい。
// app/models.py from django.db import models class Data(models.Model): name = models.CharField(max_length=20) value = models.CharField(max_length=20) owner = models.CharField(max_length=20)
ListView でやりたいとする。
view にて get_context_data を継承する。
// app/views.py from monitoring.models import Data from django.views.generic import ListView, UpdateView, DetailView class DataListView(ListView): def get_context_data(self, **kwargs): # Call the base implementation first to get a context context = super(DataListView, self).get_context_data(**kwargs) context['data_name'] = Data.objects.values('name').distinct() return context
template で次のように記載する。
// app/templates/app/data_list.html {% for data in data_name %} {{ data.name }} {% endfor %}
これで重複無しでname を取得することができる。
http://docs.djangoproject.jp/en/latest/ref/models/querysets.html