Django模型:在模型实例列表上定义方法

时间:2014-06-08 18:54:48

标签: python django django-models django-templates django-views

我有以下型号

class Article(models.Model):
    url = models.URLField(max_length=200, unique=True, null=False)
    title = models.CharField(max_length=200, unique=False, null=False)

    def distinct_attrs(self):
        pks = self.child_set.all().values_list('fields__pk', flat=True)
        distinct_attrs = ChildReferences.objects.filter(pk__in=pks).distinct()
        return distinct_attrs

现在我想迭代article_list来获取文章子模型中字段的不同值。因此我定义了distinct_attrs方法。但是,它只能如下工作:

{% for article in article_list %}
    {% for field in article.distinct_attrs %}
        {{ field.value }}

但是,这为每篇文章提供了不同的值,但是对于整个文章列表。我需要做的是:

{% for field in article_list.distinct_attrs %}
    {{ field.value }}

事实上,我想从article_list中获取ChildReferences中字段的唯一值列表

1 个答案:

答案 0 :(得分:1)

我得到了这个工作。我完全删除了distinct_attrs方法,并修改了我的泛型类视图:

class MyView(generic.ListView):
    template_name = '***'
    context_object_name = 'article_list'

    def get_queryset(self):
        return Article.objects.filter(***)

    def get_context_data(self, **kwargs):
        context = super(MyView, self).get_context_data(**kwargs)
        context['distinct_attrs'] = ChildReferencing.objects.filter(***).distinct()
        return context

所以现在我只需在我的模板上执行以下操作:

{% for attr in distinct_attrs %}
    {{ attr.value }}
{% endfor %}