Django taggit表单标签

时间:2017-09-24 13:42:08

标签: python django

我找到了一个解决方案,通过执行以下方式将taggit模型中注册的标签作为选项列表进行渲染:

from taggit.models import Tag
class BlogPost(models.Model):
    tags = models.ForeignKey(Tag, on_delete=models.CASCADE, default='')

(我想改变了taggit文件夹中的内容,......我忘了,但我的工作没有任何问题)

但我想更改标签名称("标签"默认情况下)

我在forms.py中试过:

imports ...
class PostForm(forms.ModelForm):
    tag = [(i, i) for i in Tag.objects.all()]
    tags = forms.ChoiceField(label='another label name', choices=tag )
    class Meta:
        model = BlogPost
        fields = ('tags',)

它显示了我预期的结果,但是当我保存或POST时,它会返回表单验证错误'无法分配" u'标记名称'":" BlogPost .tags添加"必须是"标签" 。实例'

所以有人可以处理这个并且谢谢

1 个答案:

答案 0 :(得分:0)

您需要使用pk作为密钥

class PostForm(forms.ModelForm):
    tag = [(i.pk, i.title) for i in Tag.objects.all()]
    #     ^^^^^
    tags = forms.ChoiceField(label='another label name', choices=tag )

可能更好的解决方案是使用ModelChoiceField

     tags = forms.ModelChoiceField(queryset=Tag.objects.all(), empty_label=None)