我有一个表单,其目的是让用户添加、编辑、减去和重新排序歌曲。JavaScript DOM 操作允许用户添加、减去和重新排序歌曲字段。重新排序是通过 jQuery UI 的可排序交互。歌曲的顺序很重要。
HTML 字段名称属性值重复。我没有使用 Django 生成表单。
假设提交时有两首歌曲,Firebug 显示的表单 DOM 看起来像这样(省略 csrf):
<form method="post" action="/save/">
<ul id="sortable_songs" class="ui-sortable">
<li>
<input type="text" name="title" id="song_txt_1">
<textarea id="more_info_txtarea_1" name="more_info"></textarea>
</li>
<li>
<input type="text" name="title" id="song_txt_2">
<textarea id="more_info_txtarea_2" name="more_info"></textarea>
</li>
</ul>
<button type="submit">save</button>
</form>
示例查询字符串:
title=FOO&more_info=FOO+INFO&title=BAR&more_info=BAR+INFO
该模型:
class Song(models.Model):
title = models.CharField(max_length=65)
more_info = models.CharField(max_length=255)
#todo: foreignkey to User
可能不会涉及太多数据,无论是在每条记录中还是关于每个用户的记录数。因此,我假设对于给定的用户,当提交表单时,我将删除他们在 Song 表中的所有歌曲实例并根据表单创建一堆新实例是有道理的。(与必须编辑现有记录并具有指示歌曲顺序的 db 字段相反)。
似乎我不应该编写自己的视图,所以我正在尝试 Django 的 generic CreateView
,但也许不足为奇的是,上面的用户输入只创建了一个带有“BAR”和“BAR INFO”的模型实例 - 没有“FOO”实例制成。
有没有一种简单的方法来解决这个问题?