Django - Forma Django -Taghit
-
27-10-2019 - |
Domanda
Vorrei usare django-taggit
(clicca qui ). La documentazione ( clicca qui) parla di usare ModelForm
Per generare il modulo ma ho già la mia forma che vorrei usare.
Diciamo che se ho qualcosa del genere:
Forms.py
class MyForm(forms.Form):
......
tags = forms.CharField(max_length=200, widget=forms.Textarea)
Come salvo i tag provenienti dal tags
campo? Cosa succede nel mio views.py
? Un vero esempio sarebbe davvero apprezzato.
Soluzione
Non ho troppo familiarità con l'app Django Taggit, ma sembra che se si desidera utilizzare lo stesso campo e widget configurazione dell'app, puoi importarli da taggit.forms (https://github.com/alex/django-taggit/blob/master/taggit/forms.py
):
i tuoi modelli.py:
from django.db import models
from taggit.managers import TaggableManager
class Food(models.Model):
name = models.CharField(max_length=20)
tags = TaggableManager()
le tue forme.py
from taggit.forms import *
class MyForm(forms.Form):
name = forms.CharField()
m_tags = TagField()
Tagfield restituirà l'input elaborato utilizzando il metodo Parse_tags da Utils.Py nell'app TAGGIT. Il ritorno sembra essere un elenco pulito (imposta (parole))
le tue views.py
if form.is_valid():
name = form.cleaned_data['name']
m_tags = form.cleaned_data['m_tags']
object = Food(name=name)
object.save()
for m_tag in m_tags:
object.tags.add(m_tag)
return HttpResponseRedirect('/thanks/')
Altri suggerimenti
Non posso commentare la risposta usata/"verde ticked". Ma cambierei il blocco
for m_tag in m_tags:
object.tags.add(m_tag)
a
object.tags.add(*m_tags)
Vedi le istruzioni qui: https://github.com/alex/django-taggit/blob/master/docs/forms.txt
Se, quando si salva un modulo, usi il commit=False
Opzione dovrai chiamaresave_m2m()
Sul modulo dopo aver salvato l'oggetto, proprio come faresti per un modulo con normali molti in molti campi su di esso ::
if request.method == "POST":
form = MyFormClass(request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.save()
# Without this next line the tags won't be saved.
form.save_m2m()