Django ORM,如何使用values()并仍然可以使用choicefield?

Kim*_*cks 8 python django django-orm django-queryset choicefield

我正在使用django v1.10.2

我正在尝试创建动态报告,我将字段和条件以及主要的ORM模型信息存储到数据库中.

我生成动态报告的代码是

class_object = class_for_name("app.models", main_model_name)

results = (class_object.objects.filter(**conditions_dict)
                               .values(*display_columns)
                               .order_by(*sort_columns)
                               [:50])
Run Code Online (Sandbox Code Playgroud)

所以main_model_name可以是任何东西.
这除了的,有时相关车型的伟大工程main_model具有choicefield.

所以其中一份报告main_modelPallet.
Pallet有很多PalletMovement.
我的显示器栏目有:serial_number,created_at,pallet_movement__location

前两列是属于Pallet模型的字段.最后一个来自PalletMovement

会发生什么样的PalletMovement模型看起来像这样:

class PalletMovement(models.Model):
    pallet = models.ForeignKey(Pallet, related_name='pallet_movements',
                               verbose_name=_('Pallet'))
    WAREHOUSE_CHOICES = (
        ('AB', 'AB-Delaware'),
        ('CD', 'CD-Delaware'),
    )
    location = models.CharField(choices=WAREHOUSE_CHOICES,
                                max_length=2,
                                default='AB',
                                verbose_name=_('Warehouse Location'))
Run Code Online (Sandbox Code Playgroud)

由于查询集会返回原始值,我如何利用choicefieldin PalletMovement模型来确保pallet_movement__location给出显示的?AB-DelawareCD-Delaware

请记住,main_model根据我在数据库中存储的内容,可以是任何内容.

据推测,我可以在数据库中存储更多信息,以帮助我更好地过滤和呈现数据.

The*_*Kid 1

你会使用get_foo_display

在您的模板中:

{{ obj.get_location_display }}
Run Code Online (Sandbox Code Playgroud)

或者

{{ obj.pallet_movement.get_location_display }}
Run Code Online (Sandbox Code Playgroud)

[编辑:] 正如评论中所指出的,这在调用时不起作用values()