2017-01-09 7 views
0

Django pollsチュートリアルを終了しました。このチュートリアルでは、基本的に多項選択問題(関連する選択肢に関する質問)を作成します。あなたは、この本当に素晴らしい「追加選択」ボタンを得るように管理者を設定します。 (私は今までのDjangoが好きです)(ポスト調査チュートリアル)Django admin:Django管理者に追加するにはどうすればいいですか?

私は、フリー・レスポンス、真偽などの他の質問タイプも持つクイズ・アプリを構築したいと思っています。 。私は最終的にDjangoの管理者のボタン "SELECT QUESTION TYPE"を手に入れたいと思いますが、どうすればいいですか?ここで

は私のモデルで私の試みです:上記の私のモデルで

(models.py) 

class Quiz(models.Model): 
    quiz_name = models.CharField 

class Multiple_choice_question(models.Model): 
    quiz = models.ForeignKey(Quiz) 
    question_text = models.CharField  

class Free_response_question(models.Model): 
    quiz = models.ForeignKey(Quiz) 
    question_text = models.CharField 

class Choice(models.Model): 
    question = models.ForeignKey(Multiple_choice_question) 
    choice_text = models.CharField 

、Multiple_choice_questionとFree_response_questionはMultiple_choice_questionは子供(選択肢)を有し、Free_response_questionがないという事実を除いて同一であるが、私は多くを作成しますquestion_text以外のさまざまな属性を持つさまざまな問題の種類があります。たとえば、画像の有無にかかわらず質問があります。他に、質問としてベクトルを描画するための「x-component」や「y-component」などの属性を持つものもあります。毎回管理者にすべての属性が表示されるため、すべての質問タイプに同じモデルを使用するだけではありません。

私は流れになりたい:クイズが作成されたら

管理者にログイン--->クイズを選択するか、「NEWクイズを追加」をクリック--->、があるはずです「質問タイプを選択」ボタン--->問題タイプを選択すると、その質問タイプの属性が入力され、入力して保存(または別の質問タイプを追加)する必要があります。

チュートリアルで残したadmin.pyコードは次のとおりです...私が望むものを達成するためにはどうすれば修正できますか?

from django.contrib import admin 
from .models import Choice, Question 

class ChoiceInline(admin.TabularInline): 
    model = Choice 
    extra = 3 

class QuestionAdmin(admin.ModelAdmin): 
    fieldsets = [ 
     (None,    {'fields': ['question_text']}), 
     ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), 
    ] 
    inlines = [ChoiceInline] 
    list_display = ('question_text', 'pub_date', 'was_published_recently') 
    list_filter = ['pub_date'] 
    search_fields = ['question_text'] 

admin.site.register(Question, QuestionAdmin) 

これは私の編集の試みですが、他に何が必要ですか?

from django.contrib import admin 
from .models import Quiz, Multiple_choice_question, Free_response_question, Choice 

class ChoiceInLine(admin.TabularInline): 
    model = Choice  

class MultipleChoiceQuestionInLine(admin.TabularInline): 
    model = Multiple_choice_question 
    inlines = [ChoiceInLine] 

class FreeResponseQuestionInLine(admin.TabularInline): 
    model = Free_response_question 

class QuizAdmin(admin.ModelAdmin): 
    inlines = *Choice of* [MultipleChoiceQuestionInLine, FreeResponseQuestionInLine, etc.] 

admin.site.register(FreeResponseQuestionInLine, FreeResponseQuestionInLine, Quiz, QuizAdmin) 

ありがとうございました他の提案は歓迎です!

答えて

0

OHこれは大きな問題です。

[OK]をクリックします。質問に応じて、「質問タイプ」を選択すると、ページにいくつかの異なる属性が表示されます。この問題を解決するには、いくつかの手順が必要です。

  1. 使用AJAX、JavaScriptやjQueryのTECH特殊な方法(例えば、/管理/ get_choice)設定
  2. への要求(POST/GET)を送信、その後、テンプレートのページからユーザーの選択を取得しますこのメソッドのurl(url(r '^/admin/get_choice/$'、get_choice))。
  3. get_choiceのメソッドでは、データベースから結果を検索するオプションとしてパラメータを取得し、その結果を[テンプレート]ページに戻します。
  4. テンプレートページで、AJAX、JavascriptまたはJQuery TECHを使用して、テンプレートページに結果を表示します。
  5. POSTは結果をデータベースに保存するためのメソッドにすべてを渡します。
  6. 終了。

私はこれがあなたにいくつかのアドバイスを与えることを望みます。

+0

ご回答ありがとうございます。これは私が望んでいたよりも複雑に見えます。私はいくつかの関連するオブジェクトモデルから選択することに対処するためのいくつかの組み込みの機能があることを期待していたが、私はすべてが簡単だとは思わない... –

+0

はい、そうです。 Djangoは単なるフレームワークです。それはすべてをまとめるだけで、それを使用する非常に一般的な方法を提供します。特別な機能、特にページの効果がある場合は、自分で開発する必要があります。 –

関連する問題