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



我有那些型号:

class Question(models.Model):
description = models.CharField(max_length = 255)
class Quiz(models.Model):
name = models.CharField(max_length = 32)
questions = models.ManyToManyField(Question, related_name = 'questions')

我感兴趣的是有一个属性,它可以返回相关测试的索引值。

因此,当我在我的观点中这样做时:

def view_quiz(request,slug):
quiz = Quiz.objects.get(name = slug)
questions = quiz.questions.all()
return render(request = request, template_name = 'main/quiz.html', context = {'quiz': quiz,'questions': questions})

我也可以访问该问题的索引

我在想创建一个这样的属性问题模型:

class Question(models.Model):
description = models.CharField(max_length = 255)
options = models.ManyToManyField(Option, related_name = 'options',default = None)
@property
def question_number(self):
return 'index of the related quiz'

但我无法计算出该属性的代码,因此它将返回相关问题的索引。

有什么建议吗?感谢

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

注意: 问题的索引取决于顺序,并且您的quiz.questions.all()查询集现在的顺序不稳定——数据库不一定每次都以相同的顺序返回问题。为了强制稳定排序,我将假设Question实例是按name排序的。

class Quiz(models.Model):
...
def ordered_questions(self):
questions = self.questions.order_by("name")
# You can change to zero based indexing using `start=0`
for index, question in enumerate(questions, start=1):
question.index = index  # Inject the index into the question
# Use a yield statement here to keep the queryset lazy and efficient.
yield question

然后,无论您在哪里需要访问每个问题的索引,都可以使用quiz.ordered_questions()方法。

相关内容

  • 没有找到相关文章

最新更新