创建与查询集相对应的模型

时间:2018-06-21 02:24:13

标签: python django design-patterns

我正在使用Python Django。我想要一个动态主页。确切地说,我想显示不同的书籍清单。例如,一个清单可能是畅销书,而另一个清单可能是旧书。这些列表可以在将来添加,我需要它们是动态的。每个列表都有一个标题和一个与该列表中的书相对应的查询集。处理此问题的最佳做法是什么?我的List模型的属性应该是什么?

更新

问题是我不想每次可能都有新列表时都更改前端设计。这些列表应该是动态的。例如,我可能想添加一个新列表,比如说2018年前,我知道查询集是什么。我想要一个模型,使得该模型的每个实例都与这些列表之一相对应,然后我唯一需要做的就是创建一个具有查询集和列表标题的新实例。然后,我希望我的网站在有人要求获得主页时返回所有这些列表。

3 个答案:

答案 0 :(得分:0)

您应该将自定义查询集放在your model's manager中。

答案 1 :(得分:-1)

我写了一个玩具示例,希望这会有所帮助

  1. models.py
  2. views.py
  3. html

from django.db import models

class Books(models.Model):
    name = models.CharField(max_length=20)
    best_sellers = models.BooleanField()
from django.shortcuts import render_to_response
from book.models import Books

def book_page(request):
    books = Books.objects.all()
    return render_to_response('book_page.html',locals())
    <!doctype html>
    <html>
        <head>
            <title> Book lists </title>
            <meta charset='utf-8'>
        </head>
        <body>
            {% for b in books %}
                {% if b.best_sellers %}
                    <h2>{{ b.name }}</h2>
                {% else %}
                    <h3>{{ b.name }}</h3>
                {% endif %}
            {% endfor %}
        </body>
    </html>

答案 2 :(得分:-1)

对不起,我不会为您提供任何代码,因为我不会为您完成工作。我建议您考虑一下如何设计数据库。

例如,您是否只需要一种具有所有书籍的模型,而不要具有几个字段来指示它是“畅销书”还是被视为“旧书”。

因此,在这种情况下,要查找“旧书”,您可能需要一个timestamp字段,然后运行一个查询,将经过某个日期的书视为旧书。那可能是一个清单。

对于畅销书,您可以在布尔字段中自行说明该书是否是畅销书。然后,您可以根据该布尔字段运行查询过滤。那可能是另一个列表。

因此,请考虑一下您想要的确切列表是什么,以及如何有效地对此进行查询。