Python Django中的枚举类型

Python Django中的枚举类型,python,django,enumeration,Python,Django,Enumeration,我试图在Django中使用枚举类型,但感觉我做的事情不对 我正在构建一个类似ebay的webapp,其中我的物品以.category属性保存在数据库中 class Listing(models.Model): class Category(models.TextChoices): TOY = "TO", _("Toys") FASHION = "FA", _("Fashion"

我试图在Django中使用枚举类型,但感觉我做的事情不对

我正在构建一个类似ebay的webapp,其中我的物品以
.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,
    )
我提到了枚举类型的使用,但据我所知,存在一些灰色区域

当我呈现模板以显示
列表
时,如何传递与我的
列表
类别
关联的字符串值

我试过这样的方法:

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

或者我可以通过
“listing”
变量访问它吗?我想让浏览器显示
Home
listing.category=“HO”

显示
列表
,每当您使用具有选择的字段时,Django会为您提供一种方法来使用
获取显示
,您可以在模板中使用它,如:

{{ listing.get_category_display }}

美好的还有别的办法吗?假设我有字符串
“Home”
,并且想要一个所有列表的列表,其中包含
listing.category=“HO”
。类似于以下内容:
listings=Listing.objects.filter(category=category\u name.reverse(“Home”)
不要这样想,因为在大多数用例中,您希望在字段存储实际值的同时获取显示值。制作此类过滤器最简单的方法是
category=Listing.category.HOME
,因为您已经导入了列表,这也减少了键入错误等的机会。在您使用枚举的情况下,上面是
category=Listing.category.HOME.value