如何获取Django中所有对象字段的值?

问题描述 投票:0回答:3

我正在尝试制作一个如下所示的 JSON:

[
    {
        "num_of_followers": 2,
        "name": "Math 140",
        "created_by": "aaa"
    }
]

问题是我真的不明白我怎么能得到一个特定数据库对象的值列表(换句话说我怎么能得到整行)

@csrf_exempt
def create_subject(request, subject):
    subject, created= Subjects.objects.get_or_create( 
        name=subject,
        user=request.user,
        created_by=request.user)
    list = []
    columns = [Subjects._meta.get_all_field_names()]
    row = ????????
    for value in row:
        record = dict(zip(columns,value))
        list.append(record)
    result = simplejson.dumps(list, indent=4)
    return HttpResponse(result)
python django django-models django-orm
3个回答
18
投票

如果您询问如何为一个对象执行此操作,那么您应该使用:

from django.forms.models import model_to_dict


values = model_to_dict(the_object)

@Marat 的回答很好而且有效,但它适用于

QuerySet
,而不是一个对象。


12
投票

使用 .values() 查询集方法:

@csrf_exempt
def create_subject(request, subject):
    subject, created= Subjects.objects.get_or_create( 
        name=subject,
        user=request.user,
        created_by=request.user)

    return HttpResponse(
        simplejson.dumps(
            list(models.Subject.objects.filter(id=subject.id).values()), 
            indent=4
        )
    )

1
投票

我在让文件字段正常工作方面遇到了一些困难。最后,这对我有用。

def queryset_object_values(object):
    fields = [field.name for field in list(type(object)._meta.fields)]
    field_values = [(field, getattr(object, field)) for field in fields]
    out = {}
    for field in field_values:
        if isinstance(field[1], FieldFile):
            out[field[0]] = field[1].url
        else:
            out[field[0]] = field[1]
    return out
© www.soinside.com 2019 - 2024. All rights reserved.