9

我想使用django-taggit点击这里)。文档(单击此处)讨论了使用ModelForm生成表单,但我已经有了我想使用的表单。

假设我有这样的事情:

表格.py

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

如何保存来自tags现场的标签?什么在我的views.py?一个真实的例子将不胜感激。

4

3 回答 3

13

我对 django taggit 应用程序不太熟悉,但看起来如果您想使用应用程序使用的相同字段和小部件设置,您可以从 taggit.forms ( 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 将使用 taggit 应用程序中 utils.py 中的 parse_tags 方法返回处理后的输入。返回看起来是一个清理列表(set(words))

你的意见.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/')
于 2011-03-19T10:23:23.050 回答
7

我无法评论使用过的/“绿色勾选”的答案。但我会改变街区

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

object.tags.add(*m_tags)
于 2011-12-23T01:34:37.273 回答
3

请参阅此处的说明: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()
于 2012-04-07T15:44:02.013 回答