2011-12-21 60 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