【问题标题】:how to debug ModelMultipleChoiceField [closed]如何调试 ModelMultipleChoiceField [关闭]
【发布时间】:2016-08-09 17:11:56
【问题描述】:

我尝试记录 ModelMultipleChoiceField 的值

logger.debug("names %s" % self.fields['names_list'])

但我得到了

  2016-08-09 17:00:19,027 DEBUG views names <django.forms.models.ModelMultipleChoiceField object at 0xa74d0bcc>

预期的结果是这样的:

  2016-08-09 17:00:19,027 DEBUG views names [33,40,45]

更新 我不确定有什么不清楚的地方——我想,你想看模型,但我认为没用——我不需要任何值,只需要在 ModelMultipleChoiceField 中选择的实例的 pk

我需要调试,因为当我输入表单时,我设置了一些隐藏字段:

<input id="id_names" name="names" type="hidden" value="[33]" />

并且我正在尝试使用附加字段(使用 ModelMultipleChoiceField)来设置它 - 在清理期间,我正在检查并设置值。但看起来 ModelMultipleChoiceField 在干净时是空的,所以我想调试它是否属实。

(我必须将字段名称重命名为names_list,因为您可能认为隐藏字段和多项选择字段具有相同的名称)

【问题讨论】:

  • 您需要显示更多上下文。我们不知道你从哪里打电话给logger.debug
  • 我知道解决方案 - 我完全忘记了,我使用的是干净的方法,所以我可以使用 self.cleaned_data['names'] - 这不是我想要的,但用于调试够了

标签: python django debugging


【解决方案1】:

您可以将ModelMultipleChoiceField 转换为字符串列表

selected_names = [label for value, label in self.fields['names'].choices if value in self['names'].value()]
logger.debug("names %s" % selected_names)

【讨论】:

  • 'in ' 需要字符串作为左操作数,而不是 int
  • 等等,为什么你使用 self['names'] 不应该是 self.fields['names']
猜你喜欢
  • 2019-05-16
  • 2017-11-02
  • 1970-01-01
  • 2010-10-31
  • 2010-09-15
  • 2020-06-28
  • 1970-01-01
相关资源
最近更新 更多