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

标签 python django django-models queue

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

我想做的是能够创建对象队列,例如,博客文章队列。下面,我描述了我想象中的队列是如何工作的:

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

创建精选帖子队列是此类功能如何发挥作用的一个示例。

我目前的知识不允许我弄清楚什么是正确的方法。如有任何指点,我将不胜感激。

提前致谢

最佳答案

这是一种方法:

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)

这忽略了“排序”的要求,但这并不难添加,例如:

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

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

关于python - 如何在 Django 中创建对象队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1664952/

相关文章:

python - 在 Numpy(或 Scipy)中计算斜率

python - 如何从初始 URL python 构造 URL

python - 尝试在 Azure 上部署 Django 服务器时出现 "ModuleNotFoundError: No module named ' django '"

python - 我在为模板渲染动态数据时遇到问题

python - Django:让管理员获取图像文件,但将其存储为 base64 字符串

python - 如何在 Python 中导入和捕获特定于模块的异常?

python - 如果下一行具有相同的第一个值,则删除行,python

python - 使用Django Rest Framework的APITestCase时出错

python - django 序列化外键对象

django - 如何过滤使用扩展模型类字段连接的事件用户