Джанго и 2 вопроса - PullRequest
       7

Джанго и 2 вопроса

0 голосов
/ 21 декабря 2011

Это моя модель:

from django.db import models
from depot.models import Subject, Student

# Create your models here.
class Credit(models.Model):
    subject = models.ForeignKey(Subject)
    number = models.IntegerField()
    first_level_questions = models.IntegerField(default=8)
    second_level_questions = models.IntegerField(default=8)
    third_level_questions = models.IntegerField(default=4)

class Question(models.Model):
    credit = models.ForeignKey(Credit)
    question = models.CharField(max_length=200)
    level_choice = (
        (1, u'1'),
        (2, u'2'),
        (3, u'3'),
    )
    level = models.IntegerField(choices=level_choice)
    a = models.CharField(max_length=200, blank=True)
    b = models.CharField(max_length=200, blank=True)
    c = models.CharField(max_length=200, blank=True)
    d = models.CharField(max_length=200, blank=True)
    right_answer_choices = (
        (1, u'a'),
        (2, u'b'),
        (3, u'c'),
        (4, u'd'),
    )
    right_answer = models.IntegerField(choices=right_answer_choices, blank=True)

class Answer(models.Model):
    question = models.ForeignKey(Question)
    student = models.ForeignKey(Student)
    answer = models.CharField(max_length=400)
    right = models.BooleanField(default=None)

    def __unicode__(self):
        return self.answer

class Mark(models.Model):
    student = models.ForeignKey(Student)
    credit  = models.ForeignKey(Credit)
    total = models.IntegerField()

Это мой admin.py:

from django.contrib import admin
from credits.models import Credit, Question

class QuestionInline(admin.StackedInline):
    model = Question
    extra = 0

class CreditAdmin(admin.ModelAdmin):
    list_display = ['subject', 'number']
    inlines = [QuestionInline,]


admin.site.register(Credit, CreditAdmin)

Я решаю свою первую проблему. Спасибо. Моя вторая проблема: Я хочу иметь метод в моей модели марки. Вы знаете, как:

def total_mark(self):
    return Answer.objects.filter(student=self.student, right=True).count()

А как же кредит? Мне нужны оценки точного студента и точного кредита.

1 Ответ

0 голосов
/ 21 декабря 2011

По вашему первому вопросу, я думаю, это связано с тем, что ChoiceField имеет значение '' (пустая строка), если ничего не выбрано.Это проблема для двух полей выбора, которые вы создаете, потому что им нужны целые числа, но они не могут преобразовать '' в целое число.Я полагаю, эта ошибка появляется при отправке формы?Вы выбрали right_answer при отправке?Я бы попытался удалить blank=True из этого поля - в конце концов, на каждый вопрос должен быть правильный ответ!


Что касается вашего второго вопроса, вы, вероятно, хотите что-то вроде этого:

# given a student object s
correct_answers = Answer.objects.filter(student=s, right=True).count()
# now you can save the mark how you want
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...