2013-09-30 14 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')