Django -Django -Taggitフォーム
-
27-10-2019 - |
質問
使いたいです django-taggit
(ここをクリック )。ドキュメント( ここをクリック)使用について話します ModelForm
フォームを生成するには、使用したいフォームが既にあります。
私がこのようなものを持っているなら、と言ってみましょう:
forms.py
class MyForm(forms.Form):
......
tags = forms.CharField(max_length=200, widget=forms.Textarea)
から来るタグを保存するにはどうすればよいですか tags
分野?私の中に何が起こるか views.py
?本当の例は本当に感謝しています。
解決
Django Taggitアプリにはあまり精通していませんが、アプリが使用する同じフィールドとウィジェットのセットアップを使用する場合は、taggit.formsからインポートできます(https://github.com/alex/django-taggit/blob/master/taggit/forms.py
):
あなたのモデル.py:
from django.db import models
from taggit.managers import TaggableManager
class Food(models.Model):
name = models.CharField(max_length=20)
tags = TaggableManager()
あなたのforms.py
from taggit.forms import *
class MyForm(forms.Form):
name = forms.CharField()
m_tags = TagField()
Tagfieldは、taggitアプリのutils.pyのparse_tagsメソッドを使用して、処理された入力を返します。リターンはクリーンアップリストのように見えます(セット(単語))
あなたの眺め
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/')
他のヒント
使用済み/「グリーンチェック型」の答えについてコメントすることはできません。しかし、私はブロックを変更します
for m_tag in m_tags:
object.tags.add(m_tag)
に
object.tags.add(*m_tags)
ここで指示を参照してください: https://github.com/alex/django-taggit/blob/master/docs/forms.txt
フォームを保存するとき、あなたは commit=False
呼び出す必要があるオプションsave_m2m()
オブジェクトを保存した後のフォームでは、通常の多くのフィールドと多くのフィールドを持つフォームの場合と同じように::
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()