python - 在 Taggit 中使用复选框

标签 python django django-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>

最佳答案

这样定义您的表单:

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')

关于python - 在 Taggit 中使用复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19098144/

相关文章:

python - python 中的关键字参数别名

Django:重定向到一个页面,然后再次重定向回来?

python - 在 Django 中使用谷歌日历 api

python - django taggit防止不同模型之间的重叠标签

python - 在 django-taggit 中,如何获取与特定用户关联的对象的标签?

python - 在 PyQt 中使用 matplotlib 的段错误

python - 如何保存 nltk FreqDist 图?

python - matplotlib 中 Poly3DCollection 图的透明度

python - 如何获取值 ('content_object' )?