2011-12-21 61 views
0

这是我的模型:Django和2个问题

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() 

但是信用呢?我需要准确的学生和确切的学分。

+0

对不起,我还没有在你的第二个问题清晰。如果你有单独的问题或更多的问题,你应该创建单独的问题,而不是更容易找到。你也应该发布你如何解决你的第一个问题,以防其他人遇到类似问题。 – aganders3 2011-12-21 18:10:05

回答

0

对于第一个问题,我认为这与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 
+0

教师可以在没有变体的情况下创建问题,这就是为什么没有正确的答案) – user530408 2011-12-21 17:40:35

+0

嗯,我认为这将是'right_answer'' IntegerField'的一个问题。您需要覆盖在管理界面中创建的'ChoiceForm'的默认值,所以它在空白时不会尝试解析'''''。另一种选择是在“right_answer_choices”中添加另一个“没有正确答案”的选项(例如'(0,u'none')')。 – aganders3 2011-12-21 17:53:29

+0

我已经解决了谢谢。看看我的问题。我修改它来解释我想要的第二个问题。 – user530408 2011-12-21 17:57:48