热门标签:
Q:

django-django-taggit形式

我想使用django-taggit点击这里)。 文档(点击这里)谈到使用ModelForm来生成表单,但是我已经有了我想要使用的表单。

比方说,如果我有这样的事情:

forms.py

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

如何保存来自tags字段的标签? 我的views.py里有什么? 一个真正的例子将是真正的赞赏。

原网址
A:

我对django taggit应用程序不太熟悉,但看起来如果你想使用应用程序使用的相同字段和小部件设置,你可以从taggit导入它们。表格(https://github.com/alex/django-taggit/blob/master/taggit/forms.py):

你的models.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将使用parse_tags方法返回已处理的输入utils.py 在taggit应用程序中。 返回看起来是一个清理列表(set(words))

你的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/')

所有回答

共 2 条

author avatar

我无法评论使用/"绿色打勾"的答案。 但我会换块

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

object.tags.add(*m_tags)
author avatar

见这里的说明: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()

相似问题