2013-09-30 1 views
2

사용자가 양식을 제출할 때 게시물에 태그를 지정할 수 있도록 Taggit을 사용하려고합니다. 하지만 성공적으로 수동으로 태그를 입력하도록 할 수 있습니다. 확인란으로 변경하려고합니다. 어떤 아이디어?Taggit의 확인란 사용

forms.py 

    class TalesForm(ModelForm): 

     class Meta: 
      model = Tale 
      fields = ('title', 'body', 'tags') 
      m_tags = TagField() 


    models.py 

    class Tale(models.Model): 
     title = models.CharField(max_length = 50) 
     body = models.TextField(max_length = 10000) 
     pub_date = models.DateTimeField(default = datetime.now) 
     poster = models.CharField(max_length = 30) 
     tags = TaggableManager() 

     def __unicode__(self): 
      return self.title 


    views.py 

    def add(request): 
     if request.user.is_authenticated(): 
      if request.method=='POST': 
       form=TalesForm(request.POST) 
       if form.is_valid(): 
        m_tags = form.cleaned_data['tags'] 
        newTale=Tale(title=form.cleaned_data['title'], body=form.cleaned_data['body'], poster = request.user) 
        newTale.save() 
        for m_tag in m_tags: 
         newTale.tags.add(m_tag) 
        #form.save_m2m() 
        return HttpResponseRedirect('/home/%s'%newTale.id) 
       else: 
        return render_to_response('story/add.html', {'form':form}, context_instance=RequestContext(request))         
      else: 
       form=TalesForm() 
       args = {} 
       args.update(csrf(request)) 
       args['form'] = form 
       context= {'form': form} 
       return render_to_response('story/add.html',context, context_instance=RequestContext(request)) 
     else: 
      return HttpResponseRedirect('/home') 


html 

<form method="post" action="/home/add/"> 
    {% csrf_token %} 
    <div class="register_div"> 
     {% if form.title.errors %}<p class="error" >{{ form.title.errors }}</p>{% endif %} 
     <p><label for="title"{% if form.title.errors %} class="error"{% endif %}>Title:</label></p> 
     <p>{{ form.title}}</p> 
</div> 
    <div class="register_div"> 
     {% if form.body.errors %}<p class="error" >{{ form.body.errors }}</p>{% endif %} 
     <p><label for="body"{% if form.body.errors %} class="error"{% endif %}>Body:</label></p> 
     <p>{{ form.body }}</p> 
</div> 
    <div class="register_div"> 

     <p><label for="tag">Tags:</label></p> 
     <p>{{ form.tags }}</p> 
</div> 
    <input type="submit" value="Add Story" name="submit" /> 
</form> 

답변

4

양식이 방법으로 정의합니다

from taggit.models import Tag 

class TalesForm(ModelForm): 
    tags = forms.ModelMultipleChoiceField(queryset=Tag.objects.all(), 
              widget=forms.CheckboxSelectMultiple()) 

    class Meta: 
     model = Tale 
     fields = ('title', 'body', 'tags')