首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该如何在Django视图中创建一个可迭代的项,允许我根据模板中的外键(或缺少外键)对项进行分组?

我应该如何在Django视图中创建一个可迭代的项,允许我根据模板中的外键(或缺少外键)对项进行分组?
EN

Stack Overflow用户
提问于 2013-10-04 08:09:03
回答 1查看 186关注 0票数 1

我已经构造了一个视图,即子类Django的ListView。目前,它运行良好。它提供了我的艺术品类中的对象列表,我可以在模板中迭代这些对象。

但是,我现在已经包含了一个(不是必需的)外键(系列),当我显示艺术品对象时,我想将它们按序列分组。我也想订购他们的日期,同时将任何艺术品对象与series=None在其中(根据日期也)。

如下所示:

  1. 艺术作品(12/2013) (series=None)
  2. 艺术品(12/2013)艺术品(12/2013)艺术品(11/2013)(系列=1‘11/2013)
  3. 艺术品(10/2013) (series=None)
  4. 艺术作品(12/2013)艺术品(12/2013)艺术品(11/2013)(系列=‘系列2’09/2013)

我的模特长得像这样:

代码语言:javascript
复制
class Series(models.Model):
    title = models.CharField(max_length=200, unique=True)
    date = models.DateTimeField(default=timezone.now(), editable=False)
    def __unicode__(self):
        return self.title

class Artwork(models.Model):
    title = models.CharField(max_length=200, unique=True)
    series = models.ForeignKey(Series, blank=True, null=True, on_delete=models.SET_NULL)
    date = models.DateTimeField(default=timezone.now(), editable=False)
    image = models.ImageField(upload_to='artwork_images/%Y/%m/')
    def __unicode__(self):
        return self.title

我猜想,如果我的视图为模板提供类似嵌套列表的内容,我可以以某种方式实现我想要的结果。这与ListView是可能的吗?或者我应该构建一个基于函数的视图?

如果这似乎是一个天真的问题,那就道歉。我是Django/Python世界的新手(还有Stackoverflow!)。如有任何建议或建议,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-04 08:24:39

我只需要使用一个基于普通函数的视图,但是如果需要,可以使用ListViewget_context_data()方法返回任意数据。

  1. 创建用于排序的关键函数: def key_function(艺术作品):如果artwork.series是None: return (artwork.date,None):return (artwork.series.date,artwork.series) 该功能使用serie的日期,如果可航,而艺术品的日期,否则。系列id是键的第二部分(如果可用的话),因此属于同一系列的艺术品被保存在彼此的旁边,即使有多个具有相同日期的意境。
  2. 使用键对数据进行排序: def your_view(请求):artwork = Artwork.objects.select_related() artwork_list_sorted =Artwork.objects.select_related(artwork_list_sorted,key=key_function)返回呈现(请求,"your_app/artwork_list.html",{'artwork_list_sorted':artwork_list_sorted}) 或者使用ListView: def get_context_data(self,**kwargs):context = super(ArticleListView,self).get_context_data(**kwargs) queryset = self.get_queryset() context‘list_list_sorted’= sorted(queryset,key=key_function)返回上下文
  3. 使用重新组合模板标记对数据进行分组: {% artwork_list_sorted按序列重新分组为artwork_grouped %} { % } {%用于artwork_grouped %} {% %} {%用于artwork.list %} { item.title }({ item.date }}) {% endfor %} (series={{ artwork.grouper }}) {%item.title} 或者,只需迭代原始排序列表,在需要时显示系列-使用如果改变了模板标签: {% artwork_list_sorted %} {{ artwork.title}({ artwork.date }}){%如果更改%}(series={{ artwork.series.title }}) {% endifchanged %} {% endfor %}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19176314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档