2015-08-21 3 views
-1

У меня есть 2 модели, которые выглядят так,Джанго - Попутный iteratable данные из 2-х связанных моделей шаблон

class OnlineTest(models.Model): 
    name = models.CharField(max_length=50) 
    questions = models.ManyToManyField(Question) 

class OnlineTestProgress(models.Model): 
    examinee = models.ForeignKey(MSchoolMateUser) 
    quiz = models.ForeignKey(OnlineTest) 
    complete = models.BooleanField(default=False, blank=False) 

Внутри моего шаблона я хочу, чтобы показать пользователю все тесты и их статус. Итак, если статус теста в модели OnlineTestProgress ПОЛНЫЙ, это будет зеленая строка, и если она НЕ ПРИНИМАЕТСЯ, это будет красная строка.

Это требует от меня повторения более двух моделей, и я не могу этого сделать.

Для m тестов и n пользователей, модель OnlineTestProgress будет иметь записи m.n, в то время как модель OnlineTest будет иметь m записей.

Я рассмотрел возможность написания функции в модели OnlineTest, но не уверен, что это правильный подход.

Спасибо за ваше время. Ваша помощь очень ценится.

+0

«Это требует от меня повторения двух моделей, и я не могу этого сделать». Какие? Почему нет? –

+0

Я довольно новичок в django, и проблема, с которой я сталкиваюсь, объединяет данные двух моделей, чтобы я мог перебирать их с помощью цикла. –

+0

Похоже, вы хотите 'OnlineTestProgress.objects.filter (exame = request.user)', который затем может быть отфильтрован по значению 'complete', затем? Не уверен, будет ли этот фильтр соответствовать, потому что я не знаю, как выглядит ваш 'MSchoolMateUser'. –

ответ

0

Зачем вам нужно перебирать две модели? Кажется, вам просто нужно перебирать OnlineTestProgress?

Если OnlineTestProgress только уже принятые тесты, а затем просто добавить все тесты, которые не OnlineTestProgress на заднем конце

или просто перебирать OnlineTest и проверить, если каждый из них находится в OnlineTestProgress, передавая все OnlineTest в OnlineTestProgress как список, называемый take_list и do

+0

Модель OnlineTestProgress будет содержать только те тесты, которые были сделаны. Я также хочу показать тесты, которые еще не были выполнены пользователем. –

+0

на бэкэнд, добавьте все незанятые тесты в список OnlineTestProgress с полным значением false – bryan60

+0

@ bryan60, который является планом, если нет лучшего способа сделать это. Я ищу, чтобы найти способ, который более эффективен, чем это. –

Смежные вопросы