首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使Django值()排除某些字段?

如何使Django值()排除某些字段?
EN

Stack Overflow用户
提问于 2022-10-12 08:32:55
回答 2查看 59关注 0票数 0

我有多个模型,其中有像"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,它可以在所有型号中使用。

示例:

代码语言:javascript
运行
复制
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()中删除这些键

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-10-12 08:49:58

这应该是可行的:

代码语言:javascript
运行
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2022-10-12 08:43:19

代码语言:javascript
运行
复制
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)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74038789

复制
相关文章

相似问题

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