如何从Django中的字符串路径获取模型字段

时间:2016-08-14 16:51:13

标签: django django-1.8

我试图从Django中的字符串过滤器中获取字段对象。

例如,

Sale.objects.filter(product__category__name='shoes')

给定模型Sale和字符串"product__category__name",是否可以获取Category.name的字段对象? (或者更具体地说,该字段的verbose_name。)

更新

这是我最终提出的

from django.db.models.fields import FieldDoesNotExist

def find_field(model, lookup):
    lookups = list(reversed(lookup.split("__")))
    field = None

    while model and lookups:
        current = lookups.pop()
        field = model._meta.get_field(current)
        model = field.related_model
        if lookups and model is None:
            raise FieldDoesNotExist(lookup)
    return field

2 个答案:

答案 0 :(得分:1)

你可以尝试这些方面的东西

ASSIGN

这将返回名称

如果你有多个应用程序,这可能会变得更难,因为你也需要知道应用程序名称,但也许这可以作为参数传递。

答案 1 :(得分:0)

要获取verbose_name,您应致电object._meta.get_field('field').verbose_name

category._meta.get_field('name').verbose_name