【问题标题】:Create a model filed which corresponds to a queryset创建对应于查询集的模型字段
【发布时间】:2018-06-21 02:24:12
【问题描述】:

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

更新

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

【问题讨论】:

    标签: python django design-patterns


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我写了一个玩具例子,希望对你有帮助

      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>

      【讨论】:

      • @Siavash 有什么评论吗??我花时间回答你的问题,不管它对你有用与否。回应是一种基本的礼貌......
      【解决方案3】:

      抱歉,我不会给你任何代码,因为我不会为你做这项工作。我建议您考虑如何设计数据库。

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

      因此,对于这种情况,要查找“旧书”,您可能需要一个时间戳字段,然后运行一个查询,将经过特定日期的书视为旧书。这可能是一个列表。

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

      所以想想你想要的确切列表是什么,以及如何有效地为此查询。

      【讨论】:

      • 问题是我不想每次我可能有一个新列表时都改变我的前端设计。这些列表应该是动态的。例如,我可能想添加一个新列表,比如说 2018 年的顶部,我知道查询集是什么。我想要一个模型,使得该模型的每个实例都对应于这些列表之一,然后我唯一需要做的就是创建一个具有查询集和列表标题的新实例。然后我希望我的网站在有人请求获取主页时返回所有这些列表。
      猜你喜欢
      • 2011-12-08
      • 1970-01-01
      • 2017-03-09
      • 2016-12-18
      • 2021-10-25
      • 2013-12-31
      • 2012-06-12
      • 2013-10-18
      • 1970-01-01
      相关资源
      最近更新 更多