Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django.forms能帮我多少忙?_Django_Forms_Django Forms - Fatal编程技术网

django.forms能帮我多少忙?

django.forms能帮我多少忙?,django,forms,django-forms,Django,Forms,Django Forms,我有以下模型,它在个人和Eprint出版物之间形成了多对多关系。每个人的个人资料页面将显示通过此表引用的EPRINT,但仅当show=True时,并且以“顺序”字段的数字顺序显示: class UsersEprint(models.Model): person = models.ForeignKey(Person) eprint = models.ForeignKey(emodels.Eprint) # this has a .title field show = mod

我有以下模型,它在个人和Eprint出版物之间形成了多对多关系。每个人的个人资料页面将显示通过此表引用的EPRINT,但仅当show=True时,并且以“顺序”字段的数字顺序显示:

class UsersEprint(models.Model):
    person = models.ForeignKey(Person)
    eprint = models.ForeignKey(emodels.Eprint) # this has a .title field
    show = models.BooleanField(default=True)
    order = models.IntegerField(default=0)
现在这一切都可以从管理员管理,但我希望一个用户友好的形式去在网站上的用户配置文件页面

理想情况下,我想要一个表格,每个人的eprint都有一行,给出:无法编辑的eprint标题,一个“show”的勾选框,以及一个“order”的数字字段。“删除”复选框也很有用

modelformsets的默认方法为列出所有eprint的eprint提供了一个下拉选择器-这是因为表单不知道我不想编辑它。我尝试了各种覆盖字段和小部件的方法,但这一切似乎都有点困难,而且我最终还是要在模板中逐行呈现表单,看起来是这样的

下一个复杂的问题是,我可以使用javascript系统——拖放行或向上/向下移动箭头,而不是使用用户类型编号来重新排列表行。当用户提交表单时,将获得新订单


我的问题是,什么时候我会超出django表单处理的范围?我应该放弃import django.forms,自己管理它吗?或者,即使是最尴尬的形式,里面也有有用的部分吗

这个问题没有好的答案,但我个人认为这超出了范围;正如你自己所说,你可以控制在不同庄园中渲染的场的类型,但我同意,它们确实让人觉得很混乱

另外,您是否考虑过javascript系统背后的html?你需要什么样的表格。。。如果视图希望由Django的表单处理呈现一个表单,它将如何处理这个问题。你可能会这么做,但我想很快就会变得很难看

我认为您最好从头开始使用表单设计模板,并使用处理视图。不幸的是,进行验证将花费您额外的工作,但我认为您将赢得更多的时间,让表单完全按照您的要求执行


让我重复一遍,这确实是一个建议,我相信您可以使用标准表单处理,但如果我必须做同样的事情,我就不会这样做。

我不认为您的用例特别尴尬,我相信InlineModelFormset可以很好地处理您的所有需求。需要记住的是,Django表单的主要关注点是输入数据的验证;演示文稿由您决定,也应该由您决定

当然,Django为表单布局提供了一些基本的工具,如_ul等人,但您不应该太在意它们。定制表单的呈现方式不应该被视为一种黑客行为,而是一种功能-

因为你不会编辑 eprint,您可以排除此字段 从基础表单中,您可以 传给 inlinemodelformset_工厂;在里面 您的模板,只需显示 改为form.instance.eprint.title form.eprint form.instance的 指向基础模型 实例

在中呈现窗体时 formset,您可以检查 form.instance.show-如果是 如果为True,则渲染窗体 正常地否则,请添加 隐藏类到窗体的 容器,或将字段渲染为 隐藏输入 形式…就像隐藏的一样。 不幸的是,你不能简单地忽略 它们,因为这会导致验证 服务器上的错误

传递can_delete=真到 inlinemodelformset_工厂将 在每个选项中添加-DELETE复选框 类型您可以使用jQuery来隐藏 这样,而不是渲染删除 按钮单击时,按钮 设置复选框的值,然后 剩下的由Django处理。你可以看到 这方面的一个例子

可以使用 像jQueryUI这样的工具包——看看有什么想法。再一次 渐进增强是什么 你在这里;你所有的剧本都会 要做的是更新订单字段,然后让 Django在提交时处理实际保存。 这样,功能仍然存在,即使 如果Javascript被禁用或 客户缺席


不要害怕探索和实验。并非所有Django都有文档记录,但请使用源代码Luke:如果您担心依赖某个可能在将来某个时候删除的功能,您可以随时询问

form.instance属性是否有文档记录?我在源代码中看到了,但在文档中什么都没有。文档中有使用instance=e.g.f=ArticleForminstance=a创建模型表单的示例,但这并不意味着f.instance是获取绑定对象的方法。我一直在想模型形式和模型对象之间的联系在哪里。。。很明显是这样,但我担心它没有记录。你说得对……它没有记录。我想这有点像模型。它们都非常有用,我希望最终核心开发人员将它们作为官方API的一部分。当然,除非有更好的东西
er出现:是的,谢谢你的有用且好的回答!我刚刚发现了jQuery的jqgrid插件,它看起来非常有用,我只需要使用它。谷歌代码上有一个休眠的django jqgrid项目,还有一堆其他的web资源。。。