首页 > 解决方案 > 在 Django 选项中使用更具描述性的名称

问题描述

我正在创建一个电子商务应用程序,但遇到了一个问题,我似乎无法让 Django 显示元组中的第二项。比如我的models.py...

class ProductItem(models.Model):
    OPTIONS = [
        ("RED","Red"),
        ("DBL","Dark Blue"),
        ("LBL","Light Blue"),
        ("DGR","Dark Green"),
        ("LGR","Light Green"),
        ("PNK","Pink"),
        ("GRY","Gray"),
        ("BLK","Black"),
        ("BRO","Brown"),
        ("WHT","White"),
        ("MAR","Marroon"),
        ("ORG","Orange"),
        ("BEG","Beige"),
        ("GLD","Gold"),
        ("SLV","Silver"),
        ("MLT", "MultiColour")
    ]
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    colour = models.CharField(choices=OPTIONS, default="BLK", max_length=20)
    quantity_available = models.PositiveIntegerField()

    def __str__(self):
        return f"{self.product} -> ({self.colour})"

在我看来.py ...

def product_detail(request, id):
    products = Product.objects.filter(id=id).first()
    context={
        "product": products, 
        "options": ProductItem.objects.filter(product=products)
    }
    return render(request, "store/product_detail.html", context)

最后在我的模板中......

<select id="style">
   {% for option in options %}
        <option value="{{option.colour}}">{{option.colour]}}</option>
   {% endfor %}
</select>

在这种情况下,我们假设应该出现深蓝色。我希望该值与DBL我在 CHOICES 中提到的一样,并希望Dark Blue为用户显示。但在这种情况下,只DBL显示了我不想要的东西。关于如何解决这个问题的任何想法?

谢谢!

标签: pythondjangodjango-modelsdjango-viewsdjango-templates

解决方案


您可以使用方法 [Django-doc]。所以对于该领域,即:get_fieldname_display()colourget_colour_display()

<select id="style">
    {% for option in options %}
        <option value="{{ option.colour }}">{{ option.get_colour_display }}</option>
    {% endfor %}
</select>

推荐阅读