我有一个 Unit 表,该表与活动具有ManyToMany关系。
在“单位”表中呈现“活动”时,我希望每个“活动”都链接到其自己的详细信息视图。
我尝试了很多方法,但是还没有找出最好的方法。
我可以使用lambda获取网址:
activities = tables.ManyToManyColumn(verbose_name='Activities', transform=lambda obj: obj.get_absolute_url,)
但是对于实际渲染该链接,我找不到很好的解决方案。
似乎我应该能够通过访问render_activities()
方法中的每个项目来自定义链接的呈现。但是使用render_FOO()
时ManyToManyColumns
方法中的值似乎无效。
答案 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版本中也适用。