Несколько таблиц и измененные наборы запросов - PullRequest
0 голосов
/ 17 декабря 2009

Я должен вести инвентаризацию серверов и их модулей памяти и приводов. Я создал три таблицы. Я хочу иметь возможность получать всю информацию о сервере, включая информацию о памяти и диске, и отображать ее на одной странице.

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')

... чтобы следующее генерировало модули памяти и накопители, связанные со значением служебного тега:

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

а. Это точный подход б. если да, то как мне отобразить "MemoryModule.mems.all () и Drive.drvs.all () в шаблоне?

1 Ответ

0 голосов
/ 18 декабря 2009

а. Это выглядит правильно, но вы проверили это? С моделями django, есть больше накладных расходов, чтобы увидеть, работает ли ваш код, чем было бы с Python. Я не вижу очевидных ошибок; это выглядит по книге .

б. Я бы попробовал что-то вроде:

<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! Виноват. Движок шаблонов django не хочет ничего похожего на функции. Это слишком разработано. В худшем случае он позволяет вам вызывать функции, но только если они не принимают аргументов и только если они не похожи на вызовы функций. Следовательно, без скобок. Тем не менее, вам все равно нужно сделать MemoryModule видимым, то есть передать {"MemoryModule": models.MemoryModule} в словарь. Еще лучше было бы передать {"mems":models.MemoryModule.mems.all()} и просто вызвать {% for mem in mems %} в шаблоне.

...