Django 枚举我相关的多对多对象
Django Enumerate my related many to many objects
我有那些模型:
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')
我对 属性 感兴趣,其中 return 是相关测验的索引值。
所以当我在我看来这样做时:
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'
但我想不出那个 属性 的代码,所以它将 return 相关问题的索引。
有什么建议吗?谢谢
一个简单的方法是将每个索引注入到查询集 return 编辑的问题中。这应该是 Quiz
上的模型方法,因为两个测验可以共享相同的 Question
对象。
注意:问题的索引是顺序相关的,你的quiz.questions.all()
查询集现在顺序不稳定-数据库不一定会 return 每次都以相同的顺序出现问题。为了强制稳定排序,我将假设 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()
方法。
我有那些模型:
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')
我对 属性 感兴趣,其中 return 是相关测验的索引值。
所以当我在我看来这样做时:
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'
但我想不出那个 属性 的代码,所以它将 return 相关问题的索引。
有什么建议吗?谢谢
一个简单的方法是将每个索引注入到查询集 return 编辑的问题中。这应该是 Quiz
上的模型方法,因为两个测验可以共享相同的 Question
对象。
注意:问题的索引是顺序相关的,你的quiz.questions.all()
查询集现在顺序不稳定-数据库不一定会 return 每次都以相同的顺序出现问题。为了强制稳定排序,我将假设 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()
方法。