如何从多对多字段中获取相关对象
how to get related objects from a many to many field
我正在尝试从多对多字段中获取对象。当用户选择他们的答案时,我希望能够从 MtoM field.Then 中获取相关对象,增加相关对象 ansData + 1。模型中的 ans 是另外一回事,但出于某些原因我更改了它,但这就是我所做的我正在尝试增加。
models.py
class User(models.Model):
first_name = models.CharField(max_length=25)
last_name = models.CharField(max_length=25)
#password = models.CharField(max_length=25)
email = models.EmailField(max_length=100)
class Quiz(models.Model):
name = models.CharField(max_length=200,primary_key=True)
NOQ = models.IntegerField(default=1)
class Meta:
verbose_name = "Quiz"
verbose_name_plural = "Quizzes"
def __str__(self):
return self.name
#number Of Questions
class Major(models.Model):
major = models.CharField(max_length=200)
ans = models.IntegerField(default=0)
answer = models.ManyToManyField('Answer')
def __str__(self):
return self.major
class Question(models.Model):
question_text = models.CharField(max_length=400)
quiz = models.ForeignKey("Quiz", on_delete=models.CASCADE, null=True)
def __str__(self):
return self.question_text
class Answer(models.Model):
question = models.ForeignKey('Question', on_delete=models.CASCADE, null=True)
answer_text = models.CharField(max_length=200)
def __str__(self):
return self.answer_text
class QuizTaker(models.Model):
user = models.ForeignKey("User", on_delete=models.CASCADE)
quiz = models.ForeignKey("Quiz", on_delete=models.CASCADE)
completed = models.BooleanField(default=False)
def __str__(self):
return self.user
views.py
class QuizView(DetailView):
model = Question
template_name = 'Quizzes/quiz.html'
class ResultsView(generic.DetailView):
model = Question
template_name = 'JSUMA/results.html'
def vote(request, question_id):
question = get_object_or_404(Question, question_id)
try:
selected_answer = question.answer_set.get(pk=request.POST['answer'])
except (KeyError,Answer.DoesNotExist):
return render(request, 'Quizzes/quiz.html,' {'question' : question,
'error_message' : "You didn't select an answer.",})
else:
- 这与显示投票应用程序的官方 Django 教程非常相似。推荐大家仔细看看
- 休息,你应该为每个答案添加一个投票数整数字段。
selected_answer = Answer.objects.get(pk=request.POST['answer'])
- 现在只需增加对该答案的投票。
我正在尝试从多对多字段中获取对象。当用户选择他们的答案时,我希望能够从 MtoM field.Then 中获取相关对象,增加相关对象 ansData + 1。模型中的 ans 是另外一回事,但出于某些原因我更改了它,但这就是我所做的我正在尝试增加。
models.py
class User(models.Model):
first_name = models.CharField(max_length=25)
last_name = models.CharField(max_length=25)
#password = models.CharField(max_length=25)
email = models.EmailField(max_length=100)
class Quiz(models.Model):
name = models.CharField(max_length=200,primary_key=True)
NOQ = models.IntegerField(default=1)
class Meta:
verbose_name = "Quiz"
verbose_name_plural = "Quizzes"
def __str__(self):
return self.name
#number Of Questions
class Major(models.Model):
major = models.CharField(max_length=200)
ans = models.IntegerField(default=0)
answer = models.ManyToManyField('Answer')
def __str__(self):
return self.major
class Question(models.Model):
question_text = models.CharField(max_length=400)
quiz = models.ForeignKey("Quiz", on_delete=models.CASCADE, null=True)
def __str__(self):
return self.question_text
class Answer(models.Model):
question = models.ForeignKey('Question', on_delete=models.CASCADE, null=True)
answer_text = models.CharField(max_length=200)
def __str__(self):
return self.answer_text
class QuizTaker(models.Model):
user = models.ForeignKey("User", on_delete=models.CASCADE)
quiz = models.ForeignKey("Quiz", on_delete=models.CASCADE)
completed = models.BooleanField(default=False)
def __str__(self):
return self.user
views.py
class QuizView(DetailView):
model = Question
template_name = 'Quizzes/quiz.html'
class ResultsView(generic.DetailView):
model = Question
template_name = 'JSUMA/results.html'
def vote(request, question_id):
question = get_object_or_404(Question, question_id)
try:
selected_answer = question.answer_set.get(pk=request.POST['answer'])
except (KeyError,Answer.DoesNotExist):
return render(request, 'Quizzes/quiz.html,' {'question' : question,
'error_message' : "You didn't select an answer.",})
else:
- 这与显示投票应用程序的官方 Django 教程非常相似。推荐大家仔细看看
- 休息,你应该为每个答案添加一个投票数整数字段。
selected_answer = Answer.objects.get(pk=request.POST['answer'])
- 现在只需增加对该答案的投票。