【问题标题】:How to turn JQuery selection data into something a Django form can use如何将 JQuery 选择数据转换为 Django 表单可以使用的数据
【发布时间】:2014-05-29 08:14:31
【问题描述】:

我一直在 Django 网站上阅读有关 Django 的信息,表格看起来非常简单方便。

但是我不知道如何将表单与我现有的前端集成,该前端使用 JQuery 作为其部分输入。

在我的网站上,有很多框可供用户单击以选择他们感兴趣的食物类别。我创建了a simplified JSFiddle demo here

当用户提交表单时,我想知道他选择了哪些食品类别并将其作为请求的一部分进行处理。 有没有形式上的机制可以让我做到这一点?


代码:

HTML:

<div class="choice">
    Dairy
</div>
<div class="choice">
    Meat
</div>
<div class="choice">
    Snack
</div>
<div class="choice">
    Organic
</div>

CSS:

.choice {
    background-color: yellow;
    padding: 20px;
    display: inline-block;
    border: 1px solid black;
    border-radius: 3px;
    margin-top: 5px;
    opacity: 0.35;
}

JavaScript

$('.choice').click(function() {
    if ($(this).attr('isSelected') != "true"){
        $(this).attr('isSelected', 'true');
        $(this).css('opacity', '1');
    }
    else{
        $(this).attr('isSelected', '');
        $(this).css('opacity', '0.35');
    }
});
为方便起见,

简单示例的屏幕截图。当用户点击一个淡入淡出的框时,它的不透明度变为 1(表示它被选中),当再次点击它时,它返回淡入淡出的视图。

【问题讨论】:

  • 你对应的 Django 模型和表单是什么样的(如果它们存在的话)?我们需要知道这一点才能提供帮助

标签: jquery html django django-1.5


【解决方案1】:

如果您在谈论用户可以切换某种输入的用户界面,那么您实际上是在谈论复选框。

如果您有 4 个复选框与相应的 div 相关联,您只需切换复选框值,然后将这些隐藏的复选框发布为 django 处理的表单。很简单的东西。复选框“名称”属性值必须与 django 表单对象(布尔)字段匹配,并且您已经设置好了。

例如html:

<input name="dairy">

Django 表单:

class MyForm(forms.Form):
    dairy = forms.BooleanField()

如果您不想在后台使用复选框,那么您可以发布 urlencoded 关联数组,其中关联数组的键是 django 表单对象(布尔)字段名称。请记住,您不需要发布 OFF 值。您只需要发布所选元素的值。例如,假设您有 4 个选项,乳制品、肉类、零食和有机,并打开了乳制品和肉类。那么您的帖子查询应如下所示:

?dairy=on&meat=on

差不多就是这样。

【讨论】:

  • 谢谢 - 唯一的问题是,不同的用户会有不同的表单,具体取决于他们所在地区的可用性。可能有几十个类别(并且可以添加更多)。我宁愿避免将它们全部硬编码为一种形式(它们可能永远不会全部显示)
  • 因为您创建了一个带有乳制品变量的表单。如果我这样做,可能会有 100 个变量,其中许多变量几乎没有使用。另外,category是自己的model,model里面有一个region到category的外键
  • 好吧,您提出了类似“但是我无法弄清楚如何将表单与我现有的前端集成的问题,该前端使用 JQuery 作为其部分输入。”。据我了解,您希望将其集成到表单中。你不必。 Django 表单是一种在视图中获取、验证和保存已发布数据的非常简单的方法。但是你不必使用表单,如果你认为有太多的选项,即使创建动态表单也没有意义。您也可以从 request.POST 中获取已发布的变量。您最初的问题对您真正想要做什么的信息太少。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 2010-11-14
  • 2010-10-07
  • 2016-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多