Как ограничить количество тегов, разрешенных в django-taggit? - PullRequest
1 голос
/ 14 октября 2019

Я использую модуль 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

Так что я хочу знатькак я могу ограничить количество тегов, которые пользователь может ввести для сообщения

1 Ответ

1 голос
/ 14 октября 2019
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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...