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.

¿Fue útil?

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()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top