Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django枚举我的相关多对多对象_Python_Django_Manytomanyfield - Fatal编程技术网

Python Django枚举我的相关多对多对象

Python Django枚举我的相关多对多对象,python,django,manytomanyfield,Python,Django,Manytomanyfield,我有这些模型: 类模型。模型: description=models.CharFieldmax_length=255 类Quizmodels.Model: name=models.CharFieldmax_length=32 questions=models.ManyToManyFieldQuestion,相关_名称='questions' 我想有一个属性,它返回相关测验的索引值 因此,在我看来,当我喜欢这一点时: def视图_quizrequest,段塞: quick=quick.object

我有这些模型:

类模型。模型: description=models.CharFieldmax_length=255 类Quizmodels.Model: name=models.CharFieldmax_length=32 questions=models.ManyToManyFieldQuestion,相关_名称='questions' 我想有一个属性,它返回相关测验的索引值

因此,在我看来,当我喜欢这一点时:

def视图_quizrequest,段塞: quick=quick.objects.getname=slug 问题=测验。问题。全部 返回renderrequest=request,模板名称='main/quick.html',上下文={'quick':quick,'questions':questions} 我还可以访问该问题的索引

我想创建一个属性问题模型,如下所示:

类模型。模型: description=models.CharFieldmax_length=255 options=models.ManyToManyFieldOption,相关名称='options',默认值=None @财产 def问题编号自身: 返回“相关测验的索引” 但我无法找出该属性的代码,因此它将返回相关问题的索引


有什么建议吗?谢谢

一种简单的方法是将每个索引插入查询集返回的问题中。这应该是测验的一个模型方法,因为两个测验可以共享相同的问题对象

注意:问题的索引取决于顺序,而您的quick.questions.all queryset现在的顺序不稳定–数据库不一定每次都以相同的顺序返回问题。为了强制稳定排序,我将假设问题实例是按名称排序的

类Quizmodels.Model: ... def订购问题本身: questions=self.questions.order\u byname 您可以使用'start=0'更改为基于零的索引` 对于索引,枚举问题中的问题,开始=1: question.index=index将索引插入到问题中 在这里使用yield语句来保持queryset的惰性和高效性。 屈服问题
然后,无论您在哪里需要访问每个问题的索引,都可以使用quick.ordered_questions方法。

谢谢您的回复。但是为什么我必须做另一个迭代器来定义另一个属性呢?它对我来说很有用,只是感觉我在这里做了太多的迭代工作来完成任务。在第一步,我将它分配给视图中的一个变量,并作为上下文传递。这并不奏效。经过努力,我完全理解了它的逻辑。非常感谢。