如何限制django-taggit中对象的最大标签数?
我对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