2015-11-03 68 views
0

我想在我的模型值(管理員)中顯示來自外鍵的值。在Django Admin中顯示來自外鍵的值

我使用的是「除了」我是我應該明確使用。我如何使用它?以及如何讓下面的工作正確?它只是顯示(無),但那裏有價值。

感謝

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

不應該是:''回報format_html( '

「{0}」
',price.price)''? –

+0

您應該知道Django ORM爲ForeignKey反向引用創建相關字段。您應該在'Product'實例上嘗試'my_product.variation_set'。有關詳細信息,請參閱https://docs.djangoproject.com/en/1.8/topics/db/queries/#backwards-related-objects! –

+0

產品有很多變體,變體的價格很多。你想展示什麼? –

回答

1

讓我們儘量簡化你的代碼。

相反:

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

你可以寫:

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

過濾器返回查詢集,但你想有一個價格:

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

如果沒有價格發現,你想寫None,否則price.price:

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) 
+0

謝謝你 - 我被告知 「除」 可引起存儲器/硬件問題 - 並明確使用。這將如何應用?這會更好/更安全嗎? 'ValueError除外: pass' – Yian

+0

我認爲「except」和「explicit」版本都很好。 –

相關問題