2015-11-26 59 views
0

我有一個模型在Django與'複合主鍵'設置通過unique_together。django - 顯示一個獨特的一起模型的兩個領域

爲模型下面我可以建立STR()的結果,使其顯示兩個字段(名稱和供應商)

class Product(models.Model): 
    name = models.CharField(max_length=255) 
    supplier = models.ForeignKey(Supplier) 
    # some other fields 

    def __str__(self): 
     return self.name 

    class Meta: 
     unique_together = ('name', 'supplier') 

因此,它也將出現在相關模型如。

class ProductPrices(models.Model): 
    name = models.ForeignKey(Product) 

回答

1

unique_together不是複合主鍵。這只是一個複合約束。您的模型仍然有一個隱藏的自動生成的id字段,它是真正的主鍵。

是的,你可以設置__str__輸出你想要的任何東西,只要它是一個字符串即可。它不一定是唯一的,但它確實有幫助。 (順便說一句,我不知道你使用的Python或如果這改變了在Python 3,但建議使用__unicode__而不是__str__

def __unicode__(self): 
    return "{0} (from {1})".format(self.name, self.supplier) 

但同樣,這是不是您的實際主鍵。要查看以及(並不推薦,因爲它的噪聲):

def __unicode__(self): 
    return "{0} (from {1}) (#{2})".format(self.name, self.supplier, self.id) 
+0

謝謝,(我知道unique_together不是複合主鍵,但由於它不經常被用來作爲代理這個在Django似乎沒有這個功能)我沒有意識到任何字符串都可以工作。那樣做了。最後,我實現了可調用,因爲我更喜歡單獨列中的兩個字段,因此可以對這些字段進行排序等。請參閱http://stackoverflow.com/questions/163823/can-list-display-in-a-django -modeladmin-display-attributes-of-foreignkey-field – Yunti

+0

Django缺乏適當的複合主鍵支持是一種PITA,尤其是因爲存在一些數據庫,因此很難與它們接口。是的,我們大多數人添加模型或管理方法的顯示目的,所以我們可以有不同的列。 –

相關問題