我有一个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)
答案 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
上的哪些方法/属性返回特定字段。
如果您只想检索特定字段,则必须手动指定并获取这些字段。