2012-01-29 14 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にadminページスタイルを制御し、正式な情報を設定したい。どうすれば達成できますか?

弓、ありがとう!

は、まず第一に、ここで

答えて

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) 

あなたがタイプの選択、回答とQuiz_Ressourceの複数のモデルへのあなたのクイズモデル参照することをDjangoに教えるこの方法。これが不明な場合は、リレーショナルデータベースでManyToManyの概念を検索できます。

このようにモデルを書き直すと、管理ページに選択項目、追加項目、および再選択項目を追加して選択するフィールドが表示されます。ここで提供されるジャンゴと一緒に続行するに

は、ドキュメントを使用する:カスタム管理テンプレートの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

ありがとうございました!今、私は管理ページとして働く特別なWebページを設計したい –