如何限制对象在django-taggit中可以拥有的最大标记数?

时间:2011-07-04 16:33:37

标签: python django tags django-taggit

我对django-taggit作为处理Django中的标签的应用程序的实现印象非常深刻。但是,我一直无法找到一种方法来设置可应用于对象的最大标签数 - 如果愿意,则为“MAX_TAG”。这可能吗?我想限制我的应用程序,例如,每个对象只有5个标签。

谢谢,

Ĵ

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

TaggableManager使用的内部_TaggableManager具有您需要更改的add方法。

首先,您需要扩展_TaggableManager并更改add方法以检查正在使用的标记数量,并相应地修改标记列表。

然后,您必须延长TaggableMananger并覆盖__get__,以便它使用您的自定义_TaggableManager