使用django-tagging
應用爲例,我想改變Tag
模型的經理,這樣我可以有一個擴展的替換它:Django的 - 擴展了應用程序的模型,以覆蓋其經理
# mytagging/models.py
from django.db import models
from tagging.models import TagManager, Tag
class MyTagManager(TagManager):
def update_tags(self, obj, tag_names):
# My actions
return super(MyTagManager, self).update_tags(obj, tag_names)
def add_tag(self, obj, tag_name):
# My actions
return super(MyTagManager, self).add_tag(obj, tag_name)
Tag.objects = MyTagManager
現在,Tag.objects = MyTagManager
不起作用,我也沒有指望它,但它說明了我想完成的事情。我可以很好地創建class MyTag(Tag)
並以此方式設置管理器,但是似乎我還需要擴展每個使用Tag
的其他類並將其更改爲MyTag
。
我試過Tag.objects = MyTagManager()
來初始化這個類,但是我從查詢對象中得到錯誤'NoneType' object has no attribute '_meta'
,它出現了。
上面的代碼調用從管理頁面Tag.objects.update_tags(kwargs['instance'], tags)
時呈現此錯誤:
不受約束的方法update_tags()必須與MyTagManager例如 作爲第一個參數來調用(得而不是LibraryFile實例)
LibraryFile
模型是我試圖標記的模型,因此應該是第二個參數而不是第一個參數(首先是self
)。
很高興知道,看起來不錯,您要使用同一個數據庫表的基類擴展的模型。我的問題是'Tag'用於其他表單和字段等,我還必須擴展這些以將它們的用法更改爲'MyTag',因爲它們使用'update_tags()'?代替基類管理器的代碼會少很多,但我不確定這是否可行。 – Cruel 2012-03-05 18:41:30