質問

使いたいです 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()
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top