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

时间:2018-07-25 14:51:41

标签: django-tables2

我有一个 Unit 表,该表与活动具有ManyToMany关系。

在“单位”表中呈现“活动”时,我希望每个“活动”都链接到其自己的详细信息视图。

我尝试了很多方法,但是还没有找出最好的方法。

我可以使用lambda获取网址:

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

但是对于实际渲染该链接,我找不到很好的解决方案。

似乎我应该能够通过访问render_activities()方法中的每个项目来自定义链接的呈现。但是使用render_FOO()ManyToManyColumns方法中的值似乎无效。

2 个答案:

答案 0 :(得分:1)

我最终使用了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%}
                                        '''
                                       )

答案 1 :(得分:0)

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

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

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

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

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

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