8

django-taggit (click here)을 사용하고 싶습니다. 문서 ( click here)는 ModelForm을 사용하여 양식을 생성하는 방법에 대해 설명하지만 이미 사용하고 싶은 양식이 있습니다. 나는 tags 필드에서 나오는 태그를 저장 어떻게django - django-taggit 양식

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

forms.py :

나는 이런 식으로 뭔가가있는 경우의가 있다고 가정 해 봅시다? 내 views.py에 무엇이 들어 있습니까? 실제 사례가 진실로 감사 할 것입니다. 내가 장고 taggit 앱 너무 익숙하지 해요,하지만 당신이 응용 프로그램이 사용하는 것과 동일한 필드와 위젯 설정을 사용하려는 경우, 당신은 taggit.forms에서 (https://github.com/alex/django-taggit/blob/master/taggit/forms.py)를 가져올 수 있습니다처럼 보이는

답변

12

:

하여 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 것 utils.p에서 parse_tags 방법을 사용하여 입력 처리를 반환 y 태그 킷 앱에서. 반환은 정리 목록 (세트 (단어))

당신의 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

태그를 삭제하도록 표시 한 경우 태그를 제거하지 않습니다. –

7

내가 사용/"녹색 쳤다"답변을 말씀 드릴 수 없습니다. 하지만 여기

object.tags.add(*m_tags) 
3

지시 사항에 차단

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

을 바꿀 것 : 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()