Вопрос

Я хотел бы использовать 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()

Ваши формы.py

from taggit.forms import *

class MyForm(forms.Form):
    name = forms.CharField()
    m_tags = TagField()

Tagfield вернет обработанный ввод, используя метод Parse_tags от utils.py в приложении Taggit. Возврат выглядит как список очищенных (SET (слова))

Ваш 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/')

Другие советы

Я не могу комментировать ответ по использованию/"зеленый тик". Но я бы изменил блок

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