0

次のようなデータベースモデルがあります。

class RssNewsItem(models.Model):
    title = models.CharField(max_length=512)
    description = models.TextField()
    image_url = models.CharField(max_length=512)
    published = models.DateTimeField(auto_now=True)
    url = models.CharField(max_length=512, default='')
    author = models.CharField(max_length=128, default='')

特定の著者のニュース項目を 3 つ、他の著者から 7 つの項目を選択して (10 のニュース項目のリストを作成)、その著者を '宣伝' したいと考えてい-publishedます。リスト上の宣伝されたニュース項目の位置は関係ありません。数字も重要ではありません。プロモートされたニュース項目がリストの 30% をカバーしている必要があります。

「author1」を宣伝したいとしましょう。私の Web サイトには合計 6 人の著者がいます。

これはDjangoで可能ですか?(リストやクエリセットの繰り返しを避けたい)

4

3 に答える 3

3
from itertools import chain
q1 = RssNewItem.objects.filter(author="author1").order_by("-published")[:3]
q2 = RssNewItem.objects.exclude(author="author1").order_by("-published")[:7]
q = list(chain(q1, q2))

Psクエリセットのマージに関する良いSOの回答は次のとおりです。

Djangoビューで2つ以上のクエリセットを組み合わせる方法は?

  • itertools は高速ですが、明らかに結果はリストであり、それ以上クエリすることはできません
  • リストに変換して追加/拡張できます: list(q1).extend(list(q2)). 上記と同じ問題で、遅くなります。
  • それらは同じモデルであるため、次のことができますq = q1 | q2。それらを QuerySet として保持します。
于 2013-06-21T10:10:14.060 に答える