les plus sexy Solution
Vous pouvez utiliser l'un des outils de autocommplete jquery décrits ici: Facebook style JQuery autocomplete plugin
ensuite sous la forme:
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',)
Vous auriez à comprendre comment modifier le JavaScript afin que de nouveaux éléments puissent être saisis (c'est-à-dire pas seulement sur es déjà dans la base de données).
Solution alternative
C'est un peu ce que le inline formsets ont été créés pour, si Narendra's solution fonctionnera.
Quelque chose comme:
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,
})
Non pas que ce formulaire est uniquement pour l'édition des éléments dans la boîte à outils. Si vous voulez que l'utilisateur puisse éditer d'autres aspects de la boîte à outils - par exemple, son nom ou sa description - vous devez créer un formulaire séparé et les afficher tous les deux dans les mêmes balises <form></form>
.
C'est exactement ce que j'ai fini par faire !! J'ai utilisé l'approche jquery. Cela fonctionne magnifiquement. Merci! – adeleinr