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.

È stato utile?

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()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top