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()
Ваши формы.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()