8

Me gustaría usar django-taggit (click here). La documentación ( click here) habla sobre el uso de ModelForm para generar el formulario, pero ya tengo mi formulario que me gustaría utilizar.django - django-taggit formulario

Digamos que si tengo algo como esto:

forms.py

class MyForm(forms.Form): 
    ...... 
    tags = forms.CharField(max_length=200, widget=forms.Textarea) 

¿Cómo puedo guardar las etiquetas de los que vienen del campo tags? ¿Qué va en mi views.py? Un verdadero ejemplo sería realmente apreciado.

Respuesta

12

No estoy muy familiarizado con la aplicación Django Taggit, pero parece que si desea utilizar el mismo campo y la configuración utiliza el widget de aplicación, puede importarlos desde los taggit.forms (https://github.com/alex/django-taggit/blob/master/taggit/forms.py):

su models.py:

from django.db import models 

from taggit.managers import TaggableManager 

class Food(models.Model): 
    name = models.CharField(max_length=20) 

    tags = TaggableManager() 

su forms.py

from taggit.forms import * 

class MyForm(forms.Form): 
    name = forms.CharField() 
    m_tags = TagField() 

el TagField volverá la entrada procesada utilizando el método parse_tags de utils.p y en la aplicación taggit. El retorno parece ser una lista limpiado (juego) (palabras)

su 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/') 
+2

Esto, por supuesto, no elimina las etiquetas, si las ha marcado para su eliminación. –

7

que no puedo comentar sobre la respuesta usado/"verde marcado". Pero me gustaría cambiar el Bloque

for m_tag in m_tags: 
    object.tags.add(m_tag) 

a

object.tags.add(*m_tags) 
3

Ver instrucciones aquí: https://github.com/alex/django-taggit/blob/master/docs/forms.txt

Si, al guardar un formulario, se utiliza la opción commit=False tendrá que llamar save_m2m() en el formulario después de guardar el objeto, del mismo modo que lo haría para un formulario con muchos campos normales 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() 
Cuestiones relacionadas