Python-Django-扩展应用程序模型以覆盖其管理器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python-Django-扩展应用程序模型以覆盖其管理器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1148字,纯文字阅读大概需要2分钟。
内容图文
![Python-Django-扩展应用程序模型以覆盖其管理器](/upload/InfoBanner/zyjiaocheng/655/34229f53b7ee4868b31ebc7b51f137ce.jpg)
以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不起作用,我也不希望它起作用,但是它说明了我想要完成的工作.我可以很好地创建MyTag(Tag)类并以这种方式设置管理器,但随后看来,我还必须扩展使用Tag的所有其他类并将其更改为MyTag.
我尝试使用Tag.objects = MyTagManager()初始化类,但出现错误“ NoneType”对象没有来自查询对象的属性“ _meta”.
当从管理页面调用Tag.objects.update_tags(kwargs [‘instance’],tags)时,以上代码会呈现此错误:
unbound method update_tags() must be called with MyTagManager instance
as first argument (got LibraryFile instance instead)
LibraryFile模型是我要标记的模型,因此应该是第二个参数,而不是第一个(自己是第一个).
解决方法:
将proxy model与其他管理器一起使用:
class MyTag(Tag):
objects = MyTagManager()
class Meta:
proxy = True
内容总结
以上是互联网集市为您收集整理的Python-Django-扩展应用程序模型以覆盖其管理器全部内容,希望文章能够帮你解决Python-Django-扩展应用程序模型以覆盖其管理器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。