首页 > 解决方案 > Django 中的枚举类型

问题描述

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

我正在构建一个类似 ebay 的 web 应用程序,其中我的列表与.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 的文档以了解枚举类型的使用,但据我所知,存在一些灰色区域。

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

我试过这样的事情:

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

或者我可以通过"listing"变量访问它吗?我想要的是浏览器显示Home一个listingwith listing.category = "HO"

标签: pythondjangoenumeration

解决方案


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

{{ listing.get_category_display }}

推荐阅读