Самое сексуальное решение
Вы можете использовать один из описанных здесь инструментов автозаполнения jquery: Плагин автозаполнения JQuery в стиле Facebook
Затем в форме:
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, чтобы можно было вводить новые элементы (т.е. не только те, которые уже есть в базе данных).
Альтернативное решение
Этовроде того, для чего были созданы встроенные наборы форм , поэтому решение Нарендры будет работать.
Что-то вроде:
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>
.