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_model是Pallet.
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-Delaware或CD-Delaware?
请记住,main_model根据我在数据库中存储的内容,可以是任何内容.
据推测,我可以在数据库中存储更多信息,以帮助我更好地过滤和呈现数据.
你会使用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()
| 归档时间: |
|
| 查看次数: |
656 次 |
| 最近记录: |