【问题标题】:Failing to pass a Field.choices integer parameter to a function in view.py (Django)无法将 Field.choices 整数参数传递给 view.py (Django) 中的函数
【发布时间】:2013-02-19 03:03:08
【问题描述】:

我正在尝试将 Field.choices 整数参数传递给 view.py 中的函数。但是,我似乎无法完成这项工作。

具体来说,在我的例子中,我想使用 Field.choices 整数参数来决定用户希望特定对象切换到哪个状态。目前,我对每种类型的状态变化都有一个视图函数,它们都是相同的。因此,这样做的目标是倾向于更 DRY 的代码。

示例情况

这是一些 HTML 代码(可以访问诊断和诊断过滤器对象):

            <a href="{% 
              url reports.views.mark
              diagnostic.id,
              diagnostic_filter.FALSE %}" 
              class="btn"> 
              False Positive 
            </a>

最初,用户点击这种类型的按钮/链接。

我想将整数 diagnostic_filter.FALSE(它是 diagnostic_filter 的三种可能状态之一)传递给广义的“标记”函数:

def mark(request, diagnostic_id, state):
   #Code to change state...

如图所示,这个“标记”函数应该通过并将诊断过滤器对象(与诊断对象相关)的状态更改为 FALSE。

这是我在 urlconf.py 中对应行的尝试:

url(r'^diagnostic/(?P<diagnostic_id>\d+)/(?P<state>\d+)/$', 'mark'),

这是我在 models.py 中的 diagnostic_filter 类的模型:

class DiagnosticFilter(models.Model):
FALSE = 1
LOW = 2
HIGH = 3
STATES = (
    (FALSE, 'False Positive'),
    (LOW, 'Low Priority'),
    (HIGH, 'High Priority'),
)
state = models.IntegerField(choices=STATES)

我正在使用以下方法将诊断和诊断过滤器传递给我的模板:

return render_to_response(
    'reports/diagnostic.html',
    {diagnostic,
     diagnostic_filter},
    context_instance=RequestContext(request)
)

这是最好的解决方法吗?我做错什么了吗?似乎当我使用按钮加载页面时,我在 Reverse for '[FILE URL HERE].mark' 的行中出现错误,参数为'(108383,未定义)'和关键字参数'{}'不是找到了。

【问题讨论】:

    标签: python html django django-templates django-views


    【解决方案1】:

    很可能您实际上可以访问diagnostic_filter 对象,或者它不是DiagnosticFilter 类。您收到的错误表明模板将值 diagnostic_filter.FALSE 视为“未定义”,这很奇怪,因为您没有在模型中显示该值,而 Django 的通常行为是将未知属性显示为 None .你能说明你是如何将diagnostic_filter 传递给模板的吗?

    【讨论】:

    • 我的模板肯定可以访问诊断过滤器。我已经在我的模板中成功使用了很长一段时间,昨天在发布问题之前仔细检查了 diagnostic_filter.FALSE 的值是否为 1。我通过插入

      {{ diagnostic_filter.FALSE }}

      来做到这一点.请参考我的问题,看看我是如何通过诊断过滤器的。干杯。
    • 忽略我最后的评论。结果有时没有定义诊断过滤器。这是有目的的(换句话说,这是一个仅在实现代码中发现的设计决策)。感谢您的宝贵时间。
    猜你喜欢
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 2020-07-17
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多