Django:在视图中迭代单个模型的多个实例

时间:2013-06-28 19:00:19

标签: python django django-models

我对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和'next'按钮,用于存储新的在我的数据库中输入(使用实际项目和类型化整数)并将我引导到下一个(随机)项目。

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

我希望有人可以给我一个提示在哪里寻找,因为我找不到这个用例的文档/教程,因为我对Django不是很有经验,所以我现在无法理解...

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

2 个答案:

答案 0 :(得分: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]

虽然上面显示了一个列表,但{Dj}也可以在Django QuerySets上使用Paginator,并将其功能整合到Django模板中。

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

欢呼。

答案 1 :(得分:0)

Paulo Bu的回答提供了从Django的AP首先获得随机排序的方法。关于你正在做的事情的棘手部分是,在页面加载之间保存项目的特定随机排序并不是真正RESTful,因为这不是无状态的。默认情况下,您提交请求后,随机排序的查询集将不再存在,并且无法保证您将遍历所有项目而不是重复和未命中。所以你要保存那个订单。如何处理这个问题有很多选择:

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