在Django Admin中显示外键中的值

时间:2015-11-03 07:44:41

标签: python django

我正在尝试在我的模型值中显示外键中的值(在管理员中)。

我正在使用“除了”我是应该使用显式。我该如何使用它?以及如何使以下工作正常?它只显示(无),但那里有一个值。

由于

Admin.py

----------------------
    def price(self, obj):
        try:
            price = Price.objects.filter(variation=Variation.objects.filter(product=obj)[0])
        except:
            price = 'None'
        return format_html('<center><b>"{0}"</b></center>', price.price)

Models.py

--------

class Product(models.Model):
    name = models.CharField ("Name", max_length=130)
    link = models.URLField("Link", max_length=740)

class Variation(models.Model):
    product = models.ForeignKey(Product, blank=False, null=False)
    variation = models.CharField (max_length=80, blank=True, null=True)
    def __str__(self):
        return self.variation

class Price(models.Model):
    price = models.DecimalField("Price", decimal_places=2, max_digits=10)
    variation = models.ForeignKey(Variation, blank=False, null=False)
    updated = models.DateTimeField(auto_now=True)
    def __int__(self):
        return self.price

1 个答案:

答案 0 :(得分:1)

让我们尝试简化您的代码。

相反:

price = Price.objects.filter(variation=Variation.objects.filter(product=obj)[0])

你可以写:

price = Price.objects.filter(variation__product=obj)

过滤返回QuerySet,但您想要一个价格:

price = Price.objects.filter(variation__product=obj)[0]

如果没有找到价格,你想写None,否则写价格。价格:

try:
    price = Price.objects.filter(variation__product=obj)[0].price
except Price.DoesNotExist:
    price = 'None'
return format_html('<center><b>"{0}"</b></center>', price)

最后是“明确的”版本:

prices = Price.objects.filter(variation__product=obj)
price = prices[0].price if prices.exists() else 'None'
return format_html('<center><b>"{0}"</b></center>', price)