Django枚举问题

发布于 2024-11-18 23:07:33 字数 689 浏览 2 评论 0原文

我尝试在 django 中实现枚举结构,这样

class Status():
PENDING = 0
CONFIRMED = 1
DENIED = 2

STATUS =(
    (PENDING,_("salary_status_pending")),
    (CONFIRMED,_("salary_status_confirmed")),
    (DENIED,_("salary_status_denied")),
)

在我的模型中我使用它,

class MyModel(models.Model):
    status = models.IntegerField(null=False, choices=Status.STATUS)

它工作得很好,如果我想在我的模板中获取枚举字段的标签,我使用它 {{ mymodel.get_status_display }} 并在我的枚举字段中写入标签 _('key..') 而不是 Django 文档中解释的数字

但是,什么如果我想在我的 view.py 中获取标签? 我想在下面编写一段代码,它应该给我枚举字段的标签而不是数字

Status.CONFIRMED 

我怎样才能实现这个?

谢谢

I try to implement enumartion structure in django such that

class Status():
PENDING = 0
CONFIRMED = 1
DENIED = 2

STATUS =(
    (PENDING,_("salary_status_pending")),
    (CONFIRMED,_("salary_status_confirmed")),
    (DENIED,_("salary_status_denied")),
)

and in my model I use it like

class MyModel(models.Model):
    status = models.IntegerField(null=False, choices=Status.STATUS)

It works fine and if I want to get the label of enum field in my template I use
{{ mymodel.get_status_display }} and it writes the label _('key..') in my enum field instead of number which is explained in Django documents

However, what if I want to get the label in my view.py ?
I want to write a code below and it should give me the label of enum field instead of number

Status.CONFIRMED 

How can I achive this ?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

用心笑 2024-11-25 23:07:33

这个怎么样?

class MyModel(models.Model):
    PENDING = 0
    CONFIRMED = 1
    DENIED = 2

    STATUS = {PENDING:_("salary_status_pending"), CONFIRMED:..., DENIED:... }    
    STATUS_CHOICES = [(a,a) for a in STATUS.items()]    
    status = models.IntegerField(null=False, choices=STATUS_CHOICES)

您可以使用 MyModel.STATUS[MyModel.CONFIRMED] 在任何地方访问您的标签

How about this?

class MyModel(models.Model):
    PENDING = 0
    CONFIRMED = 1
    DENIED = 2

    STATUS = {PENDING:_("salary_status_pending"), CONFIRMED:..., DENIED:... }    
    STATUS_CHOICES = [(a,a) for a in STATUS.items()]    
    status = models.IntegerField(null=False, choices=STATUS_CHOICES)

And you can access your label everywhere using MyModel.STATUS[MyModel.CONFIRMED]

萌吟 2024-11-25 23:07:33

我找到了。下面的代码做了我想要的

Status.STATUS [Status.CONFIRMED ][1]

I found it.The code below does what I want

Status.STATUS [Status.CONFIRMED ][1]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文