对于有选择的 Charfield,如何通过外键使用 list_display 中的人类可读名称?
For a Charfield with choices, how to use the human readable name in list_display through a foreignkey?
假设我有以下内容:
models.py :
VALUE_CHOICES = (('0', 'ZERO'),
('1', 'ONE'))
class ModelA(models.Model):
def val(self):
return self.model_b.value or ''
class ModelB(models.Model):
modela = models.OneToOneField(ModelA, related_name="model_b", null=False)
value = models.CharField(choices = VALUE_CHOICES)
和
admin.py :
class ModelAAdmin(ModelAdmin):
list_display = ['val']
当我尝试在管理站点中显示我的 ModelA
列表时,它显示 0
或 1
而不是 ZERO
或 ONE
。
我如何修改它以使其在管理站点的列表中显示来自 VALUE_CHOICES
的人类可读名称?
来自 docs,并且对于字段 val
,
class ModelAAdmin(ModelAdmin):
list_display = ['get_val_display']
这应该可以完成工作。
[OP 编辑]
我没有成功让它像这样工作,但这种方法是一个非常好的建议。下面是我如何使用这种 get_FOO_display()
方法(而且效果很好)。
我只修改了我的ModelA.val()
方法:
def val(self):
return self.model_b.get_value_display()
假设我有以下内容:
models.py :
VALUE_CHOICES = (('0', 'ZERO'),
('1', 'ONE'))
class ModelA(models.Model):
def val(self):
return self.model_b.value or ''
class ModelB(models.Model):
modela = models.OneToOneField(ModelA, related_name="model_b", null=False)
value = models.CharField(choices = VALUE_CHOICES)
和
admin.py :
class ModelAAdmin(ModelAdmin):
list_display = ['val']
当我尝试在管理站点中显示我的 ModelA
列表时,它显示 0
或 1
而不是 ZERO
或 ONE
。
我如何修改它以使其在管理站点的列表中显示来自 VALUE_CHOICES
的人类可读名称?
来自 docs,并且对于字段 val
,
class ModelAAdmin(ModelAdmin):
list_display = ['get_val_display']
这应该可以完成工作。
[OP 编辑]
我没有成功让它像这样工作,但这种方法是一个非常好的建议。下面是我如何使用这种 get_FOO_display()
方法(而且效果很好)。
我只修改了我的ModelA.val()
方法:
def val(self):
return self.model_b.get_value_display()