【问题标题】:Django Get value of model method with JSONDjango 使用 JSON 获取模型方法的值
【发布时间】:2012-08-08 11:30:38
【问题描述】:

如果所选产品在检查此问题的方法上返回 true,我目前正在尝试使用 javascript 显示额外的表单字段。虽然我为表单选择设置了 onchange 部分,但我正在努力实际访问产品方法。我假设我必须使用我没有经验的 json。我希望执行以下操作,即在 if 语句中使用该方法的返回值。我目前尝试使用的代码是(我意识到它只是显示一个警报 atm,但我的首要任务是让它工作):

function openingCheck(optionValue){
    {% check_opening_date as json %}
    var checkOpeningDateJSON = {{json|safe}};

    if(checkOpeningDateJSON)
        alert(optionValue);

};

用途:

@register.tag(name="check_opening_date")
 def check_opening_date(parser, token): 
"""return whether the product should show the opening date or not"""

product = Product.objects.get(pk=productID)

return serializers.serialize('json',product.show_opening_date())

我遇到的问题是我不确定如何将 optionValue 传递给 check_opening_date 函数以及如何返回 product.show_opening_date() 的值。

任何提示将不胜感激。

【问题讨论】:

  • 您是否尝试在加载页面后从服务器异步抓取数据,然后根据该数据显示表单字段?
  • 我想是的。我希望当用户选择 show_opening_date 返回 true 的产品时,我将显示用于输入开业日期的表单字段。因为并非所有产品都返回 true 我的猜测是必须使用json来找出产品是否返回true,然后根据需要显示表单字段。如果这是有道理的。 (我不确定这是否可能是公平的)。
  • show_opening_dateProduct 模型上的方法?
  • 确实(它检查产品上的值,只返回 True 或 False)

标签: javascript django json


【解决方案1】:

有两种方法。

  1. 渲染页面时,将show_opening_date() 的结果与表单选择一起保存在某处。这意味着对于列出的每个产品,您要么在某处创建相应的隐藏输入,要么将结果保存为 select 中的属性或其他内容。选择产品后,您只需使用 javascript 检查此隐藏输入或属性的值。加载后无需与服务器交互。 (对服务器总共只有一个请求)

  2. 或者,您只需展示产品。选择一个时,您可以使用 ajax 联系带有产品 ID 的服务器。服务器运行product.show_opening_date() 并返回带有结果的json。 (向服务器发出大量请求;初始请求,以及每次用户选择产品时)

你所拥有的没有意义。请记住,模板(以及所有模板变量和模板标签)是在页面呈现时组装的,因此它们没有任何执行 javascript 的概念(或 onchange 事件等)。您似乎对模板标签的概念有些困惑。这些应该用于模板逻辑以显示已在视图中聚合的信息(通常 - 它不是一成不变的)。

【讨论】:

  • 我将使用选项 2 运行,因为产品是动态填充的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-29
  • 1970-01-01
  • 2018-06-05
  • 2017-08-06
  • 2018-10-15
  • 2018-07-02
相关资源
最近更新 更多