我有多个模型,其中包含“created_at”“updated_at”等字段,我不想使用objects.values()
获得这些字段。
Django有办法排除values()中的字段吗?
我知道人们引用defer()
,但它不像values()
那样返回QuerySet<Dict>
,而是返回QuerySet<Model>
。
我尝试了objects.defer("created_at", "updated_at").values()
,但它在生成的Dict中包含了这2个延迟字段。
我看到defer().query
只选择SQL中的非排除字段,但使用defer(..).values()
重置延迟字段并选择所有字段。
我不能指定我想要的字段,因为不同的型号有不同的字段,我只能指定我不想要的字段。所以我不能使用values('name', 'age', ...)
我计划使用一个CustomomeManager,我可以在所有模型中使用它。
示例:
class CustomManager(models.Manager):
def values_excluded(self):
return self.values() # somehow exlude the fields and return QuerySet<Dict>
class ExampleModel(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()
created_at = models.DateTimeField()
updated_at = models.DateTimeField()
objects = CustomManager()
ExampleModel.objects.values_excluded()
在Django中有没有什么方法,或者我必须从values()
的结果Dict中手动删除这些键?
2条答案
按热度按时间qjp7pelc1#
jaql4c8m2#
这应该可行: