2009-12-17 58 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