如何使 ManyToMany 字段的值显示在 Django 通用 DeleteView 中
Posted
技术标签:
【中文标题】如何使 ManyToMany 字段的值显示在 Django 通用 DeleteView 中【英文标题】:How to make ManyToMany field's value to show up in Django generic DeleteView 【发布时间】:2021-03-04 12:23:31 【问题描述】:我一直在尝试将模型对象(正如 Django ListView
s 所做的那样)与 Django 通用 DeleteView
一起发送。坦率地说,我不确定我是否能做我想做的事。下面给出的是我正在使用的,在某种程度上它正在工作:
型号
class ApsProcesses(models.Model):
aps_process = models.CharField(primary_key=True, max_length=1, ..)
aps_process_text = models.CharField(max_length=35, verbose_name='Process Desc')
class ProcessStatuses(models.Model):
proc_status = models.CharField(primary_key=True, max_length=1, ...)
proc_status_text = models.CharField(max_length=55, verbose_name='Short Desc')
applicable_process_compo = models.ManyToManyField(ApsProcesses, related_name='proc_choices', ..)
proc_status_weightage = models.PositiveSmallIntegerField(null=True, ..)
观看次数
class ProcStatusesDeleteView(DeleteView):
template_name = ..
model = ProcessStatuses
context_object_name = 'proc_statuses'
在我的列表视图页面中,我在对象和click
上有命名的 url,它将用户带到删除页面,在该页面中显示了基础数据(对于用户选择的模型实例),然后是两个选项提供给用户 - 确认删除或取消并返回调用页面。这是我在模板中所做的:
模板
... some codes truncated here
<table>
<tr>
<th>Status Cd</th>
<th>Status </th>
<th>Process </th>
<th>Weightage </th>
</tr>
<tr>
<td style='color:red'> <strong> proc_statuses </strong></td>
<td> proc_statuses.proc_status_text </td>
<td> proc_statuses.applicable_process_compo__aps_process </td> # .aps_process_text # # << Tried to get field's attributes using both, not working though #
<td> proc_statuses.proc_status_weightage </td>
</tr>
</table>
<p>Are you sure you want to delete <a style='color:red'><strong> the record?</strong></a> </p>
<input type="submit" class="btn btn-info" value="Confirm"/>
<a href="% url 'proc_statuses_list' %" class="btn btn-info" role="button">Cancel</a>
... some codes truncated here
使用上面的模板代码显示所有字段值,除了对ManyToManyField
的引用applicable_process_compo。如果我使用以下内容(即没有双下划线或带有ManyToManyField
的点):
<td> proc_statuses.applicable_process_compo
我在字段 aps_process
的列中收到 <app_name>.ApsProcesses.None
。所以我知道特定模型 ApsProcesses 正在被访问,但是保存在特定模型实例中的值没有显示出来。
我的问题是:如何让 ManyToManyField 的值显示在页面中?
【问题讨论】:
【参考方案1】:这是我为解决问题所做的:
修改模型ProcessStatuses
如下图:
class ProcessStatuses(models.Model):
proc_status = models.CharField(primary_key=True, max_length=1, ...)
proc_status_text = models.CharField(max_length=55, verbose_name='Short Desc')
applicable_process_compo = models.ManyToManyField(ApsProcesses, related_name='proc_choices', ..)
proc_status_weightage = models.PositiveSmallIntegerField(null=True, ..)
def get_processes(self):
if self.applicable_process_compo:
return '%s' % " / ".join([applicable_process_compo.aps_process for applicable_process_compo in self.applicable_process_compo.all()])
并且在模板中修改了用于访问 ManyToMany 字段值的行,如下所示:
<td> proc_statuses.get_processes </td>
现在我可以根据需要在页面上显示值。
【讨论】:
以上是关于如何使 ManyToMany 字段的值显示在 Django 通用 DeleteView 中的主要内容,如果未能解决你的问题,请参考以下文章
如何在模板上显示 Django ManyToMany?需要简单的代码
在 ManyToMany ForeignKey 字段的模板中获取值
带有额外字段的 Django ManyToMany 字段不会显示在两个关系上