Я хочу использовать django-taggit
(нажмите здесь). В документации (щелкните здесь) говорится о используя ModelForm
для создания формы, но у меня уже есть форма, которую я хотел бы использовать.
Допустим, у меня будет что-то вроде этого:
Forms.py
class MyForm(forms.Form):
......
tags = forms.CharField(max_length=200, widget=forms.Textarea)
Как сохранить теги из поля tags
? Что входит в мой views.py
? Настоящий пример будет по достоинству оценен.
3 ответа
Я не слишком знаком с приложением 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 вернет обработанный ввод с использованием метода parse_tags из utils.py в приложении taggit. Возврат выглядит как очищенный список (набор (слова))
Ваш 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()
Похожие вопросы
Связанные вопросы
Новые вопросы
django
Django - это серверная платформа веб-приложений с открытым исходным кодом, написанная на Python. Он разработан для сокращения усилий, необходимых для создания сложных веб-сайтов и веб-приложений, управляемых данными, с особым упором на меньшее количество кода, отсутствие избыточности и более явное, чем неявное.