Используя приложение django-tagging
в качестве примера, я хотел бы изменить менеджер модели Tag
, чтобы заменить его на расширенный:
# 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
- первый).