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)
ありがとうございました他の提案は歓迎です!
ご回答ありがとうございます。これは私が望んでいたよりも複雑に見えます。私はいくつかの関連するオブジェクトモデルから選択することに対処するためのいくつかの組み込みの機能があることを期待していたが、私はすべてが簡単だとは思わない... –
はい、そうです。 Djangoは単なるフレームワークです。それはすべてをまとめるだけで、それを使用する非常に一般的な方法を提供します。特別な機能、特にページの効果がある場合は、自分で開発する必要があります。 –