python - Django 中的枚举类型

标签 python django enumeration

我正在尝试在 Django 中使用枚举类型,但感觉我没有做正确的事情......

我正在构建一个类似 eBay 的网络应用程序,其中我的列表使用 .category 属性保存在数据库中。

class Listing(models.Model):

    class Category(models.TextChoices):
        TOY = "TO", _("Toys")
        FASHION = "FA", _("Fashion")
        ELECTRONICS = "EL", _("Electronics")
        HOME = "HO", _("Home")
        OTHERS = "OT", _("Others")

    title = models.CharField(max_length=64)
    category = models.CharField(
        max_length=2,
        choices=Category.choices,
        default=Category.OTHERS,
    )

我提到了Django's documentation对于枚举类型的使用,但据我的理解,存在一些灰色地带。

当我渲染模板以显示 Listing 时,如何传递与 Listing.category 关联的字符串值?

我尝试过这样的事情:

return render(request, "auctions/listing.html", {
            "listing": listing,
            "category": Listing.Category[listing.category].label,
        })

或者我可以通过“listing”变量访问它吗?我希望浏览器能够显示带有 listing.category = "HO"Homelisting

最佳答案

每当你使用有选择的字段时,Django 都会为你提供一个方法来使用 get_<field_name>_display ,您可以在模板中使用它,例如:

{{ listing.get_category_display }}

关于python - Django 中的枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65790496/

相关文章:

python - 在Python中通过多列控制聚合的输出?

scala - `toString`中的 `scala.Enumeration$Value`是如何实现的?

ios - 如何知道 block 何时完成枚举 ALAssetsLibrary

python - 数据帧合并给出 `Process finished with exit code 137 (interrupted by signal 9: SIGKILL)`

python - 在 Python basemap 中绘制曲线

python - 是否可以在 WebStorm 中为 Django/html 模板设置自动缩进?

django - 如何在 Django 中获取一个组的所有用户?

django - 如何仅对所有Django应用程序运行测试?

python - 用户使用 DRF token 身份验证登录后,如何在 HTTP 响应中返回用户 ID?

c# - 需要帮助在 C# 中为链表制作枚举器