最性感的解決方案
你可以使用這裏描述了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