Django - Forma Django -Taggit
-
27-10-2019 - |
Pregunta
Me gustaría usar django-taggit
(haga clic aquí ). La documentación ( haga clic aquí) habla de usar ModelForm
Para generar el formulario, pero ya tengo mi forma que me gustaría usar.
Digamos si tengo algo como esto:
Forms.py
class MyForm(forms.Form):
......
tags = forms.CharField(max_length=200, widget=forms.Textarea)
¿Cómo guardo las etiquetas que provienen del tags
¿campo? Lo que va en mi views.py
? Un ejemplo real sería realmente apreciado.
Solución
No estoy muy familiarizado con la aplicación Django Taggit, pero parece que si desea usar el mismo campo y configuración de widgets que usa la aplicación, puede importarlos desde taggit.forms (https://github.com/alex/django-taggit/blob/master/taggit/forms.py
):
tus modelos.py:
from django.db import models
from taggit.managers import TaggableManager
class Food(models.Model):
name = models.CharField(max_length=20)
tags = TaggableManager()
tus formaciones.py
from taggit.forms import *
class MyForm(forms.Form):
name = forms.CharField()
m_tags = TagField()
Tagfield devolverá la entrada procesada utilizando el método parse_tags de utils.py en la aplicación TagGit. La devolución parece ser una lista de limpieza (set (palabras))
tus vistas.
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/')
Otros consejos
No puedo comentar sobre la respuesta usada/"verde marcada". Pero cambiaría el bloque
for m_tag in m_tags:
object.tags.add(m_tag)
a
object.tags.add(*m_tags)
Ver instrucciones aquí: https://github.com/alex/django-taggit/blob/master/docs/forms.txt
Si, al guardar un formulario, usa el commit=False
opción necesitará llamarsave_m2m()
en el formulario después de guardar el objeto, tal como lo haría para un formulario con muchos a muchos campos en él ::
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()