将 ManyToMandyColumn 呈现为指向每个相关对象的单独链接

Rendering ManyToMandyColumn as individual links to each related object

我有一个 Unit table,它与 Activities 存在多对多关系。

在我的单元 table 中呈现活动时,我想让每个 Activity 成为其自己的详细视图的 link。

我试过很多方法,但一直没能找到最好的方法。

我可以使用 lambda 获取 URL:

activities = tables.ManyToManyColumn(verbose_name='Activities', transform=lambda obj: obj.get_absolute_url,)

但我找不到真正 渲染 link 的好的解决方案。

看来我应该能够通过访问 render_activities() 方法中的每个项目来自定义 link 的呈现。但是使用 ManyToManyColumnsrender_FOO() 方法中的值似乎不起作用。

我最终使用了 TemplateColumn 来让它工作:

activities = tables.TemplateColumn(empty_values=(),
                                       orderable=False,
                                       template_code='''
                                        {% for activity in record.activities.all %}
                                            <a href="{% url "activity-detail" activity.pk %}">{{activity}}</a>, 
                                        {%endfor%}
                                        '''
                                       )

django-tables2==2.0.0a5 开始,ManyToManyColumn 有一个关键字参数 linkify_item,可以这样使用:

activities = tables.ManyToManyColumn(verbose_name="Activities", linkify_item=True)

这将为 ManyRelatedManager 中的每个相关对象调用 get_absolute_url()

对于 2.0 之前的 django-tables2 版本,您可以使用 transform 关键字参数来创建 <a> 标签,如下所示:

activities = tables.ManyToManyColumn(
    verbose_name="Activities", 
    transform=lambda obj: '<a href="{}">{}</a>'.format(obj.get_absolute_url(), str(obj))
)

这种稍微冗长的方法也适用于 2.0.0 alpha 版本。