2012-01-29 57 views
0

我正在用django设计一个测验引擎。 在models.py,我有这样的类:动态Django模型控件

class Quiz (models.Model): 
    quiz_id = models.AutoField (primary_key=True) 
    problem_desc = models.TextField (blank=True) 
    problem_has_resource = models.BoolField() 
    problem_is_choice = models.BooleanField() 
    def __unicode__ (self): 
     return self.quiz_id 

class Choice (models.Model): 
    choice_id = models.AutoField (primary_key=True) 
    quiz_id = models.ForeignKey (Quiz); 
    choice_desc = models.CharField (max_length = 500) 
    is_answer = models.BooleanField() 

class Answer (models.Model): 
    quiz_id = models.ForeignKey (Quiz) 
    input_answer = models.FloatField() 

class Quiz_Resource (models.Model): 
    quiz_id = models.ForeignKey (Quiz) 
    title = form.CharField (max_length = 50) 
    file = forms.FileField() 
    def __unicode__ (self): 
     return self.file.name 

测验可能需要被输入的“接听”或选择一个选择。测验可能有很多选择。测验可能会有一些额外的资源。我想让boolfield控制管理页面样式,设置正式信息。我怎样才能实现它?

鞠躬,谢谢!

在这里输入的代码

回答

1

首先,你必须涉及您的测验模型,您的选择,答案和Quiz_Ressource模型。

class Quiz (models.Model): 
    name = models.TextField(max_length=50) 
    problem_desc = models.TextField (blank=True) 
    problem_has_resource = models.BoolField() 
    problem_is_choice = models.BooleanField() 

    choices=models.ManyToManyField(Choice) 
    answers=models.ManyToManyField(Answer) 
    ressources=models.ManyToManyField(Quiz_Ressource) 

这样你可以告诉Django你的测验模型引用了Choice,Answer和Quiz_Ressource类型的多个模型。如果不清楚,可以在关系数据库中搜索ManyToMany的概念。

你重写你的模型像后,将有添加和管理页面中选择的选择,anwers和ressources领域。

要继续随着Django的使用文档这里所提供:https://docs.djangoproject.com/en/1.3/topics/db/models/#many-to-many-relationships

您的自定义管理模板的需求是一个不同的故事。你可以做到这一点在你的应用程序是这样的admin.py的:

from django.contrib import admin 
from django.contrib.admin.sites import AdminSite 
from yourapp.models import Quiz 

class QuizAdminSite(AdminSite): 

    def admin_quiz(request): 
     #here goes your custom admin view code, where you can do 
     #if has_ressource: return render_to_response('admin/quiz/has_ressource.html') 
     #elif is_choice: return render_to_response('admin/quiz/is_choice.html') 
     #and so on, you have to work out yourself how this has to look exactly 
     return HttpResponse('your custom admin view') 

    def get_urls(self): 
    from django.conf.urls.defaults import * 
    urls = super(ItemAdmin, self).get_urls() 
    my_urls = patterns('', 
     url(
      r'update_feeds', 
      self.admin_site.admin_view(self.admin_quiz), 
      name='admin_quiz', 
     ), 
    ) 
    return my_urls + urls  


class QuizAdmin(QuizAdminSite): 
    model=Quiz 

admin.site.register(Quiz,QuizAdmin) 

我不知道究竟你想与您的自定义管理视图做什么,所以我跳过这一部分。但这应该是一条遵循的道路。

+0

谢谢!现在我想设计一个特殊的网页作为管理页面 – 2012-02-05 16:58:40