如何在 django-tables2 中为 ID 字段添加隐藏输入?
How to add hidden input for ID field inside django-tables2?
我正在使用 Django-tables2 呈现一个 table,它的表单标签包裹在 table 周围,以保存修改后的行顺序数据。我需要让 table 在表单标签内呈现以下隐藏输入,以便我的表单可以保存修改后的数据。
<input type="hidden" name="id" value="{{ track.id }}">
该解决方案有效,但它目前在 td 标签内呈现输入标签,这使其显示 ID 列。如何在隐藏输入标签的同时隐藏 ID 列?
<td class="id">20098<input type="hidden" name="track_id" value="20098" /></td>
tables.py:
class TrackIDColumn(tables.Column):
def render(self, value):
return mark_safe(str(value) + '<input type="hidden" name="track_id" value="' + str(value) + '" />')
class PlaylistTable(tables.Table):
id = TrackIDColumn()
class Meta:
model = Track
attrs = {"class": "paleblue"}
orderable = False
fields = ('id', 'artist', 'title',)
模板:
<form method='POST' action='{% url "playlists:save_playlist" username=user.get_username slug=playlist.slug %}'>{% csrf_token %}
{% render_table table "django_tables2/bootstrap.html" %}
<button type="submit" name="playlist_id" value="{{ playlist.id }}" class="btn btn-primary">Save</button>
</form>
您不能在不渲染列的情况下在列中渲染某些内容。您可以做的是通过在列上添加一个空 verbose_name 来隐藏 header:
class PlaylistTable(tables.Table):
id = tables.Column(verbose_name='')
def render_id(self, value):
return format_html('<input type="hidden" name="track_id" value="{}" />', str(value))
如果您绝对不希望呈现额外的列,则必须将隐藏的输入标签添加到另一列:
class PlaylistTable(tables.Table):
artist = tables.Column()
title = tables.Column()
def render_title(self, value, record):
return format_html('{} <input type="hidden" name="track_id" value="{}" />', value, record.id)
我正在使用 Django-tables2 呈现一个 table,它的表单标签包裹在 table 周围,以保存修改后的行顺序数据。我需要让 table 在表单标签内呈现以下隐藏输入,以便我的表单可以保存修改后的数据。
<input type="hidden" name="id" value="{{ track.id }}">
该解决方案有效,但它目前在 td 标签内呈现输入标签,这使其显示 ID 列。如何在隐藏输入标签的同时隐藏 ID 列?
<td class="id">20098<input type="hidden" name="track_id" value="20098" /></td>
tables.py:
class TrackIDColumn(tables.Column):
def render(self, value):
return mark_safe(str(value) + '<input type="hidden" name="track_id" value="' + str(value) + '" />')
class PlaylistTable(tables.Table):
id = TrackIDColumn()
class Meta:
model = Track
attrs = {"class": "paleblue"}
orderable = False
fields = ('id', 'artist', 'title',)
模板:
<form method='POST' action='{% url "playlists:save_playlist" username=user.get_username slug=playlist.slug %}'>{% csrf_token %}
{% render_table table "django_tables2/bootstrap.html" %}
<button type="submit" name="playlist_id" value="{{ playlist.id }}" class="btn btn-primary">Save</button>
</form>
您不能在不渲染列的情况下在列中渲染某些内容。您可以做的是通过在列上添加一个空 verbose_name 来隐藏 header:
class PlaylistTable(tables.Table):
id = tables.Column(verbose_name='')
def render_id(self, value):
return format_html('<input type="hidden" name="track_id" value="{}" />', str(value))
如果您绝对不希望呈现额外的列,则必须将隐藏的输入标签添加到另一列:
class PlaylistTable(tables.Table):
artist = tables.Column()
title = tables.Column()
def render_title(self, value, record):
return format_html('{} <input type="hidden" name="track_id" value="{}" />', value, record.id)