如何使 ManyToMany 字段的值显示在 Django 通用 DeleteView 中
How to make ManyToMany field's value to show up in Django generic DeleteView
我一直在尝试与 Django 泛型 DeleteView
一起发送模型对象(就像为 Django ListView
s 所做的那样)。坦率地说,我不确定我是否能做我想做的事。下面给出的是我正在使用的,在某种程度上它正在工作:
车型
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'
在我的列表视图页面中,我在对象上有一个名为 url 的对象,在 click
上,它会将用户带到我显示基础数据的删除页面(对于所选的模型实例由用户),然后向用户提供两个选项 - 确认 删除或 取消 并返回调用页面。这是我在模板中所做的:
模板
... 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 的 value/s 显示在页面中?
这是我解决问题的方法:
修改模型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>
现在我正在获取要在页面上显示的值。
我一直在尝试与 Django 泛型 DeleteView
一起发送模型对象(就像为 Django ListView
s 所做的那样)。坦率地说,我不确定我是否能做我想做的事。下面给出的是我正在使用的,在某种程度上它正在工作:
车型
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'
在我的列表视图页面中,我在对象上有一个名为 url 的对象,在 click
上,它会将用户带到我显示基础数据的删除页面(对于所选的模型实例由用户),然后向用户提供两个选项 - 确认 删除或 取消 并返回调用页面。这是我在模板中所做的:
模板
... 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 的 value/s 显示在页面中?
这是我解决问题的方法:
修改模型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>
现在我正在获取要在页面上显示的值。