如何限制django-taggit中对象的最大标签数?

1 投票
2 回答
907 浏览
提问于 2025-04-16 20:48

我对django-taggit这个工具在Django中处理标签的方式非常赞赏。不过,我一直找不到一个方法来设置一个对象可以使用的最大标签数量,也就是所谓的“最大标签数”。请问这可能吗?我想限制我的应用,比如每个对象只能有5个标签。

谢谢,

J

2 个回答

1

TaggableManager使用了一个内部的_TaggableManager,这个管理器里面有一个叫add的方法,你需要对它进行修改。

首先,你需要扩展一下_TaggableManager,并且修改add方法,让它检查一下当前使用了多少个标签,然后根据这个数量来调整标签列表。

接着,你还需要扩展TaggableManager,并重写__get__方法,这样它就能使用你自定义的_TaggableManager了。

5

我在管理模型中解决了这个问题:

class MyObjectAdminForm(forms.ModelForm):
    class Meta:
        model = MyModel

    def clean_tags(self):
        tags = self.cleaned_data['tags']
        if len(tags) > 3:
            raise ValidationError("....")
        return tags

class MyObjectAdmin(admin.ModelAdmin):
    form = MyObjectAdminForm

撰写回答