2009-12-17 97 views
0

我必須保持服務器及其內存模塊&驅動器的清單。我創建了三個表格。我希望能夠檢索有關服務器的所有信息,包括內存和驅動器信息,並將其顯示在一個頁面中。多個表和修改的查詢集

class Server(models.Model): 
     Name = models.CharField(max_length=25) 
     ServiceTag = models.CharField(primary_key=True,max_length=12) #Uniquely identifies each server 

     def __unicode__(self): 
      return u'%s %s ' % (self.Name, self.ServiceTag) 

class MemoryModule(models.Model): 
     Manufacturer = models.CharField(max_length=15) 
     Size = models.CharField(max_length=15) 
     server = models.ForeignKey(Server, max_length=12) 
     mems = MemoryManager() 

     def __unicode__(self): 
       return u'%s %s' % (self.Manufacturer, self.Size) 

class Drive(models.Model): 
     Manufacturer = models.CharField(max_length=15) 
     Size = models.CharField(max_length=15) 
     server = models.ForeignKey(Server, max_length=12) 
     drvs = DriveManager() 

     def __unicode__(self): 
       return u'%s %s %s %s %s' % (self.Manufacturer, self.Size) 

我正在考慮加入下面的 「經理人」:

class MemoryManager(models.Manager): 
    def get_query_set(self): 
     return super(MemoryManager, self).get_query_set().filter(server='CC98361') 

class DriveManager(models.Manager): 
    def get_query_set(self): 
     return super(DriveManager, self).get_query_set().filter(server='CC98361') 

...所以,下面會產生memorymodules與服務標籤值相關聯&驅動器:

MemoryModule.mems.all() 
Drive.drvs.all() 

一個。這是一個準確的方法 b。如果是這樣,我將如何在模板中顯示「MemoryModule.mems.all()和Drive.drvs.all()?

回答

0

a。看起來是正確的,但是您測試了嗎?使用django模型時,看看你的代碼的運行速度比會有與Python我看不出有什麼明顯的錯誤,這看起來by-the-book

b口會嘗試這樣的:。!

<table> 
{% for mem in MemoryModule.mems.all %} 
    <tr> 
    <td>{{ mem.Manufacturer }}</td> 
    <td>{{ mem.Size }}</td> 
    <td>{{ mem.drvs }}</td> 
    </tr> 
{% endfor %} 
</table> 

編輯

哎呀我django模板引擎不需要任何看起來像func的東西蒸發散。這太開朗了。在最壞的情況下,它允許你調用函數,但前提是它們沒有參數,只有當它們看起來不像函數調用時。因此,沒有括號。也就是說,您仍需要使MemoryModule可見,即將{"MemoryModule": models.MemoryModule}傳入字典中。更好的辦法是通過{"mems":models.MemoryModule.mems.all()}並在模板中調用{% for mem in mems %}

+0

答案中顯示的模板返回錯誤消息: 無法解析餘數:'()'from'MemoryModule.mems.all()' ...這是我一直有的問題:如何在一個模板中的數據庫中顯示從兩個(或更多)不同表中生成的數據。 – 2009-12-22 13:03:28

+0

我是一個超級nube,「{」MemoryModule「:models.MemoryModule}到字典中是什麼意思?那去哪裏?視圖或模型。 – 2010-01-12 01:51:38

+0

在視圖中,您將字典傳遞給模板。對於大多數視圖,這將通過render_to_response函數完成:http://docs.djangoproject.com/zh/dev/topics/http/shortcuts/#render-to-response。更詳盡的描述可以在這裏找到:http://docs.djangoproject.com/en/dev/ref/templates/api/#compiling-a-string – 2010-01-15 17:47:32