【发布时间】:2016-07-03 18:21:57
【问题描述】:
我想在表格的每一行都有一个简单的文本表单。
预期结果的小提琴图:https://jsfiddle.net/wstg759f/1/
我的Models.py:
class Person(models.Model):
name = models.CharField(max_length=30)
class Quality(models.Model):
name = models.CharField(max_length=30)
person=models.ForeignKey(Person)
我有一个查询集,它返回所有人的汇总列表、每个人的素质计数、此人的一项随机素质:
[
{'the_count': 5, u'randomquality': u'Nice’, u'person__name': u'Joe'},
{'the_count': 4, u'randomquality': u'Generous’,u'person__name': u'Mike'},
{'the_count': 4, u'randomquality': u'Healthy’,u'person__name': u'John’'},
..
]
我的 view.html(质量是我的查询集)
<table>
<thead>
<tr>
<th>Person</th>
<th>Qualities count</th>
<th>One random quality</th>
<th>Add a Quality?</th>
</tr>
</thead>
<tbody>
{%for obj in qualities%}
<tr>
<td>{{ obj.person__name }}</td>
<td>{{ obj.the_count }}</td>
<td>{{ obj.randomquality }}</td>
<td>text form to submit a quality for this person</td>
</tr>
{% endfor %}
</tbody>
</table>
用户应该可以在文本字段中输入一个质量,一旦提交就会被添加到模型中,文本字段被替换为“谢谢,提交” 提交表单必须是独立的。 我没有明确的方向在哪里看。 你会怎么做?
从我的阅读中,我知道 formset 可能是一个解决方案,但它们对我来说真的不清楚。 在这种情况下我什至应该使用 django 形式吗? 如果是,我相信表单应该从模板中获取参数:我不需要用户告诉我人名,因为它已经在这里了。 让我知道我是否可以澄清。 提前致谢。
作为奖励,也许以后,我想避免页面刷新。 ajax 是唯一的方法吗?
【问题讨论】:
-
formsets 非常适合这种情况,如果您真的想同时提交所有行并重新加载整个页面。您的另一种选择是通过 AJAX 调用来实现这一点,然后您可以简单地仅提交具有文本的行(通过单个按钮),或者通过每个或上的按钮一次提交每一行(或通过文本中的 onChange 事件) ,具体取决于您要完成的工作)。
-
查看了您的 jsfiddle 示例...绝对是 jQuery 和 AJAX 调用的工作。
-
更多的是考虑单独提交它们(每行一次通过一个按钮)。如果我使用 Jquery 和 ajax,我还需要 formset 吗?我还想保留 modelform 的优势以进行验证。无论如何,我应该从哪里开始?
-
FormSet确实是您想要的,这很简单 - 只需调用MyFormSet = formset_factory(MyForm),然后在模板中遍历它。通读文档中的相关部分,他们有一些很好的例子,很容易理解 -
检查。我只是有一个疑问:formset生成的表格可以独立吗? (即每行通过一个按钮一次一个)
标签: ajax django forms django-forms formset