1

我对 Django 比较陌生,面临一个我还无法解决的问题:
我有两个模型,它们看起来像:

class Item(models.Model):
    char1 = models.CharField(max_length=200)
    char2 = models.CharField(max_length=200)

class Entry(models.Model):
    item = models.ForeignKey(Item)
    choice = models.IntegerField()

我在我的数据库中存储了许多项目,我希望基本上在一个视图中随机遍历所有存储的项目,并且对于每个项目显示 char1 和 char2 带有一个 IntegerField 和一个“下一步”按钮,存储一个新条目(我的数据库中的实际项目和键入的整数)并将我引导到下一个(随机)项目。

在研究过程中,我发现了例如表单向导和表单集,但这不是我想要的,向导需要多个表单模型,他可以连续显示,但我想(随机)显示只有一个模型(项目)的每个实例和为每个存储一个条目。

我希望有人能给我提示在哪里寻找,因为我在任何地方都找不到此用例的文档/教程,而且由于我对 Django 不是很有经验,所以我现在无法弄清楚......

提前致以最诚挚的问候和感谢!

4

2 回答 2

0

从您的标题来看,问题在于从单个(可能是随机/未排序的)模型中迭代多个项目。

如果我没记错的话,你要找的是Pagination。从该文本中,一个小例子是:

>>> from django.core.paginator import Paginator
>>> objects = ['john', 'paul', 'george', 'ringo']
>>> p = Paginator(objects, 2)

>>> p.count
4
>>> p.num_pages
2
>>> p.page_range
[1, 2]

尽管上面显示了一个列表,Paginator但也可以在 Django QuerySets 上使用,并且它的功能合并到 Django 模板中。

如果这不是你想要的,请告诉我。

欢呼。

于 2013-06-28T19:37:00.937 回答
0

Paulo Bu 的回答提供了首先从 Django 的 AP 获得随机排序的方法。您正在做的事情的棘手部分是,在页面加载之间保存项目的特定随机顺序并不是真正的RESTful,因为这不是无状态的。默认情况下,您的随机排序的查询集将在您处理请求后立即消失,并且无法保证您将循环通过所有项目而不是重复和遗漏。因此,您需要保存该排序。对于如何处理这个问题,有很多选择:

  1. 为每个请求提供项目 ID 的整个随机列表,并让后端按索引提供当前项目的数据
  2. 提供所有数据——完整的项目和条目——然后您可以在客户端呈现所有内容
  3. 将随机列表存储为会话变量
  4. 通过向每个项目添加 0 到 1 之间的浮点数,在该浮点数上排序,并从随机索引开始(如果您不关心每个用户是否具有相同的整体排列)来存储项目的永久随机排序
于 2013-06-28T19:41:17.380 回答