Question

Je voudrais utiliser django-taggit ( cliquez ici ). La documentation ( cliquez ici ) parle en utilisant ModelForm pour générer la forme mais j'ai déjà ma forme que je voudrais utiliser.

Regardons les choses en dire si j'ai quelque chose comme ceci:

forms.py

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

Comment sauvegarder les balises provenant du champ tags? Ce qui se passe dans mon views.py? Un exemple concret serait vraiment apprécié.

Était-ce utile?

La solution

Je ne suis pas trop familier avec l'application django Taggit, mais il semble que si vous voulez utiliser le même champ et la configuration widget de l'utilisation d'applications, vous pouvez les importer des taggit.forms ( https://github.com/alex/django-taggit/blob/master/taggit/forms.py ):

votre models.py:

from django.db import models

from taggit.managers import TaggableManager

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

    tags = TaggableManager()

votre forms.py

from taggit.forms import *

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

Le TagField retourne l'entrée traitée par la méthode des parse_tags de utils.py dans l'application Taggit. Les regards de retour à une liste nettoyé- (set (mots))

votre 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/')

Autres conseils

Je ne peux pas commenter la réponse utilisée / « vert tic tac ». Mais je changerais le bloc

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

à

object.tags.add(*m_tags)

Voir les instructions ici: https://github.com/ alex / django-Taggit / blob / maître / documents / forms.txt

Si, lors de l'enregistrement d'un formulaire, vous utilisez l'option commit=False vous devez appeler save_m2m() sur le formulaire lorsque vous enregistrez l'objet, tout comme vous le feriez pour un forme avec beaucoup normale à de nombreux domaines sur elle ::

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()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top