多个表&修改后的查询集

时间:2009-12-17 00:23:21

标签: django-models

我必须保留一份服务器及其内存模块的清单。驱动器。我创建了三个表。我希望能够检索有关服务器的所有信息,包括内存和驱动器信息,并将其显示在一个页面中。

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

一个。这是一种准确的方法吗? 湾如果是这样,我将如何在模板中显示“MemoryModule.mems.all()和Drive.drvs.all()?”

1 个答案:

答案 0 :(得分:0)

一个。这看起来是正确的,但你测试过了吗?使用django模型,查看代码运行的开销是否比使用python时要多。我看不出明显的错误;这看起来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>

修改

糟糕!我的错。 django模板引擎不需要任何看起来像函数的东西。这太开发了。在最坏的情况下,它允许您调用函数,但前提是它们不带参数,并且只有它们看起来不像函数调用。因此,没有括号。也就是说,您仍然需要MemoryModule可见,即将{"MemoryModule": models.MemoryModule}传递到字典中。更好的是传递{"mems":models.MemoryModule.mems.all()}并在模板中调用{% for mem in mems %}