我有两个类定义如下:
class Parent(models.Model)
# class definition
第二节课:
class Child(models.Manager):
def get_queryset(self):
pass
现在我要覆盖'对象'班级的父母。通常情况会是这样的:
class Parent():
objects = Child()
但我无法修改Parent类,因为它是第三方库。 这个问题有解决办法吗?
答案 0 :(得分:0)
如果我理解正确,这将有效<
class Parent(models.Model): # third party model class
# class definition
class Child(models.Manager):
def get_queryset(self):
pass
class NewParent(Parent):
objects = Child()
并且可以通过
obj = NewParent.objects.get(id=instance_id)
答案 1 :(得分:0)
setattr(Parent, 'objects', Child())
将此行写在您拥有经理类的文件末尾。 这将覆盖父类的对象属性(如果存在)或添加对象属性。 例如:
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 类中执行任何操作。
a = abc()
a.objects.all()
但是这个方法是错误的,它会覆盖对象属性,如果你想使用这个方法,那么使用不同于对象的属性名称