首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:重写超类的“对象”而不更改超类中的代码

Django:重写超类的“对象”而不更改超类中的代码
EN

Stack Overflow用户
提问于 2018-02-27 09:09:39
回答 1查看 192关注 0票数 0

我有两个类定义如下:

代码语言:javascript
复制
class Parent(models.Model)
    # class definition

第二类:

代码语言:javascript
复制
class Child(models.Manager):
    def get_queryset(self):
        pass

现在,我想重写类父级的“对象”。通常情况是这样的:

代码语言:javascript
复制
class Parent():
    objects = Child()

但是我不能修改类父类,因为它是一个第三方库。这个问题有什么解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-05 10:25:10

代码语言:javascript
复制
setattr(Parent, 'objects', Child())

将这一行写在文件的末尾,在其中有您的manager类。这将覆盖父类的对象属性(如果存在)或添加对象属性。示例:

代码语言:javascript
复制
from django.db import models

class abc(models.Model):
    pass


class pqr(models.Manager):
    def get_queryset(self, *args, **kwargs):
        print('in get_queryset')

setattr(abc, 'objects', pqr())

现在在shell中,获取或创建父类的对象,在本例中,、abc、类并对in执行任何操作。

代码语言:javascript
复制
a = abc()
a.objects.all()

,但此方法是错误的,它将覆盖对象属性,如果要使用此方法,则使用与对象不同的属性名称。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49004906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档