从Django模型中获取值

时间:2014-06-24 12:24:26

标签: django

我有一个Django(1.6)模型的实例(让我们以User为例)。我想通过调用QuerySet来获取该模型的字段值,就像我可以为QuerySet().values('first_name', 'username')做的那样。这可能吗,或者我应该只创建一个包含必填字段的字典?

编辑:更深入地了解我为什么需要这个(可能还有其他解决方法)。我想将Django模型作为JSON响应返回(使用json.dumps,而不是Django的JSON序列化器),到目前为止,我可以通过扩展默认的Python JSON编码器,特别是通过转换来处理Django模型他们使用model_to_dict到字典。问题是,这不能得到我需要的相关对象。

这是我的代码,供参考:

class JsonEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, models.Model):
            return model_to_dict(obj)  # here I'd like to pull some related values

        return json.JSONEncoder.default(self, obj)

1 个答案:

答案 0 :(得分:1)

如果要在默认情况下提取所有相关值,可以执行以下操作:

def default(self, obj):
    if isinstance(obj, models.Model):
        d = model_to_dict(obj)  # here I'd like to pull some related values
        for field in obj._meta.fields:
            if field.rel: # single related object
                d[field.name] = model_to_dict(getattr(obj, field.name))

    return json.JSONEncoder.default(self, obj)

对于单个相关对象,这将达到一个深度,但对于多对多关系或反向外键则不会。两者都是可能的,但您必须找出obj._meta上的哪些方法/属性返回特定字段。

如果您只想检索特定字段,则必须手动指定并获取这些字段。