Django:迭代vi中单个模型的多个实例

2024-06-16 01:00:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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”按钮,该按钮在我的数据库中存储一个新条目(包含实际项和键入的integer),并将我指向下一个(随机)项。你知道吗

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

我希望有人能给我一个在哪里寻找的提示,因为我没有找到这个用例的文档/教程,而且由于我对Django不是很有经验,所以我现在还不能弄清楚。。。你知道吗

致以最诚挚的问候和感谢!你知道吗


Tags: django模型数据库表单modelmodelsitem按钮
2条回答

根据您的标题判断,问题在于迭代单个(可能是随机/未排序的)模型中的多个项。你知道吗

如果我没弄错的话,你要找的是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查询集上使用,并且它的功能被合并到Django模板中。你知道吗

如果这不是你想要的,告诉我。你知道吗

加油。你知道吗

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

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

相关问题 更多 >