最性感的解决方案
你可以使用这里描述了jQuery autocommplete工具之一:Facebook style JQuery autocomplete plugin
然后形式:
class ToolBoxEditForm (ModelForm):
tools = forms.CharField(widget=forms.Textarea, required=False)
def clean_tools(self):
tool_data = self.cleaned_data.get('tools',None)
tools = []
#here, a comma is used a delim, so it's not allowed in the tool name.
for td in tool_data.split(','):
t, _ = Tool.objects.get_or_create(name=td)
tools.append(t)
return tools
class Meta:
model = ToolBox
exclude = ('user', 'popularity',)
你必须弄清楚如何修改JavaScript,以便可以输入新项目(即不只是es已经在数据库中)。
替代解决方案
这有点什么inline formsets被用于创建,因此Narendra's solution会奏效。
喜欢的东西:
from django.forms.models import inlineformset_factory
def manage_toolbox(request, toolbox_id):
toolbox = Toolbox.objects.get(pk=toolbox_id)
ToolInlineFormSet = inlineformset_factory(Toolbox, Tool)
if request.method == "POST":
formset = ToolInlineFormSet(request.POST, request.FILES, instance=toolbox)
if formset.is_valid():
formset.save()
# Do something.
else:
formset = ToolInlineFormSet(instance=toolbox)
return render_to_response("manage_toolbox.html", {
"formset": formset,
})
这并不是说这种形式是只用于编辑工具箱内的物品。如果您希望用户能够编辑工具箱的其他方面 - 例如其名称或描述 - 您可以创建一个单独的表单并在同一个<form></form>
标签内输出它们。
这正是我最终做的!我使用jquery方法。它的作品非常漂亮。谢谢! – adeleinr 2010-10-14 23:15:46