django - forme django-Taggit
-
27-10-2019 - |
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é.
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()