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