Django models 多表和修改的查询集

Django models 多表和修改的查询集,django-models,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

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

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和驱动器:

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

a。这看起来是正确的,但是你测试过了吗?对于django模型,查看代码是否运行的开销比python要大。我没有看到明显的错误;这看起来像

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模板引擎不需要任何看起来像函数的东西。这太过分了。在最坏的情况下,它允许您调用函数,但前提是它们不带参数并且看起来不像函数调用。因此,没有括号。也就是说,您仍然需要使MemoryModule可见,即将{MemoryModule:models.MemoryModule}传递到字典中。更好的方法是通过{mems:models.MemoryModule.mems.all}并调用{%for mems in mems%}在模板中。

答案中指示的模板返回错误消息:无法解析剩余部分:来自“MemoryModule.mems.all”…这是我一直存在的问题:如何在一个模板中显示数据库中两个或多个不同表生成的数据。我是超级nube,我做什么{MemoryModule:models.MemoryModule}进入字典意味着什么?这将是一个视图还是一个模型。在视图中,您将一个字典传递给模板。对于大多数视图,这将通过render_to_响应函数完成:。可以在此处找到更详细的描述: