首页 > 解决方案 > 如何限制 django-taggit 中允许的标签数量?

问题描述

我正在使用 django-taggit 模块在我的网站上标记帖子,但是我想将允许的标签数量限制为 3。我已阅读文档,但一无所获。

这是我的帖子模型

class Post(models.Model):
    author = models.ForeignKey(User,related_name='posts',on_delete=models.CASCADE)
    title = models.CharField(max_length=75)
    text = models.TextField()

   #... other fields here

    tags = TaggableManager()

    def __str__(self):
        return self.title


    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

现在这里是意见

class PostListView(SelectRelatedMixin,TagMixin,ListView):
    model = Post    
    hit_count = True
    template_name = 'mainapp/post_list.html'
    selected_related = ("user","group")
    paginate_by = 10
    context_object_name = 'posts'
    queryset = models.Post.objects.all()

    def get(self,request,):
        posts = Post.objects.all().order_by('-published_date')
        users = User.objects.exclude(id=request.user.id)
        count= User.objects.all().count()
        friend, created = Friend.objects.get_or_create(current_user=request.user)
        friends = friend.users.all()
        group = Group.objects.all()
        args = {
            'users':users, 'friends':friends, 'posts':posts, 'group':group,'count':count
        }
        return render(request, self.template_name, args)

    def get_queryset(self):
        return Post.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')

这是表格

class PostForm(forms.ModelForm):
    class Meta():
        model = Post
        fields = ['title','text','group','image','file','tags','spoiler','NSFW']
        widgets = {
            'title':forms.TextInput(attrs={'class':'textinputclass'}),
            'text':forms.Textarea(attrs={'class':'textareaclass editable'}),

        }
    def __init__(self, *args, **kwargs):
        super(PostForm, self).__init__(*args, **kwargs)
        self.fields['image'].required = False
        self.fields['file'].required = False

所以我想知道如何限制用户可以为帖子输入的标签数量

标签: pythondjangodjango-modelsdjango-formsdjango-views

解决方案


class PostForm(forms.ModelForm):

    ...

    def clean_tags(self):
        tn = self.cleaned_data.get('tags', [])
        if len(tn) > 3:
            raise ValidationError('Invalid number of tags', code='invalid')

   ...

更多信息:https ://docs.djangoproject.com/en/2.2/ref/forms/validation/


推荐阅读