2009-12-17 3 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 больше накладных расходов чтобы увидеть, если ваш код работает, чем было бы с питоном я не вижу очевидных ошибок, это выглядит by-the-book

б я хотел бы попробовать что-то вроде:...!

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

EDIT

Oops My Ошибка. Механизм шаблонов django не хочет ничего похожего на func ЦИИ. Это слишком сложно. В худшем случае он позволяет вам вызывать функции, но только если они не принимают никаких аргументов и только если они не похожи на вызовы функций. Следовательно, нет круглых скобок. Тем не менее, вам все равно нужно сделать MemoryModule видимым, то есть передать {"MemoryModule": models.MemoryModule} в словарь. Лучше всего было бы пройти {"mems":models.MemoryModule.mems.all()} и просто позвонить {% for mem in mems %} в шаблон.

+0

Шаблон, указанный в ответе, возвращает сообщение об ошибке: Не удалось разобрать остаток: '()' from 'MemoryModule.mems.all()' ... в чем проблема, с которой я столкнулся все время : как отображать данные, созданные из двух (или более) разных таблиц в базе данных в одном шаблоне. –

+0

Я супер-нуб, что значит "{" MemoryModule ": models.MemoryModule} в словарь" означает? Где это будет? Вид или модель. –

+0

В представлении вы передаете словарь в шаблон. Для большинства просмотров это будет выполняться с помощью функции render_to_response: http://docs.djangoproject.com/en/dev/topics/http/shortcuts/#render-to-response. Более подробное описание можно найти здесь: http://docs.djangoproject.com/en/dev/ref/templates/api/#compiling-a-string –

Смежные вопросы