如何在Django中创建对象队列?

Bor*_*ide 5 python django queue django-models

我是Django的新手,我正在尝试自己建立一个博客.我正在尝试创建一个我在Drupal中使用nodequeue模块实现的功能.

我想要做的是能够创建对象的队列,例如,博客文章的队列.下面,我将描述我如何想象队列的工作原理:

  • 每个队列的大小应该是用户定义的.
  • 应记录将对象添加到队列的日期.
  • 我希望能够定义属于每个队列的项目的顺序(但我认为这将非常困难).
  • 如果队列已满,则添加额外项目应丢弃队列中最旧的项目.

这种特征如何有用的一个例子是创建特色帖子队列.

我目前的知识不允许我弄清楚什么是正确的方法.我会很感激任何指针.

提前致谢

Ale*_*lli 5

这是一种方法:

import collections, datetime, itertools

class nodequeue(object):
  def __init__(self, N):
    self.data = collections.deque(N * [(None, None)])
  def add(self, anobj):
    self.data.popleft()
    self.data.push((anobj, datetime.datetime.now())
  def __iter__(self):
    it = iter(self.data)
    return it.dropwhile(lambda x: x[1] is None, self.data)
Run Code Online (Sandbox Code Playgroud)

这忽略了"排序"的需求,但这不会太难添加,例如:

class nodequeueprio(object):
  def __init__(self, N):
    self.data = collections.deque(N * [(None, None, None)])
  def add(self, anobj, prio):
    self.data.popleft()
    self.data.push((anobj, datetime.datetime.now(), prio)
  def __iter__(self):
    it = iter(self.data)
    return sorted(it.dropwhile(lambda x: x[1] is None, self.data),
                  key=operator.itemgetter(2))
Run Code Online (Sandbox Code Playgroud)

我认为用占位符预填充队列None简化了代码,因为add在添加新东西之前总是可以删除最左边(最旧或无)的项目 - 即使__iter__必须删除占位符,这也不是太糟糕.