【问题标题】:Multiple Tables & Modified Querysets多个表和修改的查询集
【发布时间】:2009-12-17 00:23:21
【问题描述】:

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

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

【问题讨论】:

    标签: django-models


    【解决方案1】:

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

    【讨论】:

    • 答案中指示的模板返回错误消息:无法解析剩余部分:'()' from 'MemoryModule.mems.all()' ...这是我一直遇到的问题一直以来:如何在一个模板中显示从数据库中的两个(或多个)不同表生成的数据。
    • 我是超级nube,“{"MemoryModule": models.MemoryModule}入字典”是什么意思?那会去哪里?视图或模型。
    • 在视图中,您将字典传递给模板。对于大多数视图,这将通过 render_to_response 函数完成:docs.djangoproject.com/en/dev/topics/http/shortcuts/…。更详尽的描述可以在这里找到:docs.djangoproject.com/en/dev/ref/templates/api/…
    猜你喜欢
    • 1970-01-01
    • 2010-11-02
    • 2021-02-15
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 2023-03-08
    • 2011-05-17
    • 2016-08-20
    相关资源
    最近更新 更多