我创建了一个模型管理器,其中的方法是在特定字段中添加一些字符串,我的目标是每次调用objects
时应用此方法。据我了解,这可以通过在自定义管理器中使用get_queryset
方法来实现,但这只有在我调用SomeModel.objects.all()
时才有效。如果我尝试应用一些过滤器,或者通过参数获取对象,它只会返回原始数据而不应用我的方法。
models.py:
class BaseModelQuerySet(models.QuerySet):
def edit_desc(self, string):
if self.exists():
for obj in self:
if 'description' in obj.__dict__:
obj.__dict__['description'] += string
return self
class BaseModelManager(models.Manager):
def get_queryset(self):
return BaseModelQuerySet(self.model, using=self._db).edit_desc('...')
class BaseModel(models.Model):
objects = BaseModelManager()
class Meta:
abstract = True
django shell中的输出:
>>> SomeModel.objects.all()[0].description
'Some example of description...'
>>> SomeModel.objects.get(id=1).description
'Some example of description'
人们,我做错了什么,请帮忙。非常感谢千倍!
答案 0 :(得分:0)
model.objects.get
方法不返回QuerySet,因此调用永远不会由get_queryset
处理。 .get
返回单个对象,而不是可迭代的对象。
因此,您希望覆盖模型管理器中的get
方法,以专门处理.get
的大小写。