Python Django中的枚举类型
我试图在Django中使用枚举类型,但感觉我做的事情不对 我正在构建一个类似ebay的webapp,其中我的物品以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"
.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