2012-01-29 54 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