我正在尝试在我的模型值中显示外键中的值(在管理员中)。
我正在使用“除了”我是应该使用显式。我该如何使用它?以及如何使以下工作正常?它只显示(无),但那里有一个值。
由于
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
答案 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)