我有多个模型,其中有像"created_at“"updated_at”这样的字段,我不想在objects.values()
中得到这些字段。
Django有方法排除值()中的字段吗?
我知道人们提到defer()
,但它不像values()
那样返回QuerySet<Model>
,而是返回QuerySet<Model>
。
我尝试了objects.defer("created_at", "updated_at").values()
,但它在生成的Dict中包含了这2个延迟字段。
我看到defer().query
只选择SQL中的非导出字段,但是使用defer(..).values()
重置延迟字段并选择all字段。
我不能指定我想要的字段,因为不同的模型有不同的字段,所以我只能确定我不想要的字段。所以我不能使用values('name', 'age', ...)
我计划使用CustomeManager,它可以在所有型号中使用。
示例:
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()
中删除这些键
发布于 2022-10-12 08:49:58
这应该是可行的:
class CustomManager(models.Manager):
def values_excluded(self, *excluded_fields):
included_fields = [f.name for f in self.model._meta.fields if f.name not in excluded_fields]
return self.values(*included_fields)
发布于 2022-10-12 08:43:19
esclude_fields = ['created_at', 'updated_at']
keys = [f.name for f in Model._meta.local_fields if f.name not in esclude_fields]
queryset.values(*keys)
https://stackoverflow.com/questions/74038789
复制相似问题