我剛剛完成了Django民意調查教程。在本教程中,您基本上構建了一個多選題(帶有相關選項的問題)。然後你配置管理員,這樣你可以得到這個非常好的「添加選擇」按鈕。 (我愛Django到目前爲止)(發佈民意調查教程)Django的管理員:添加新的相關模型類型(免費的響應,真/假等)後,如何添加到Django管理
我想建立一個測驗應用程序,其他問題類型,如自由響應,真/假等,並收集一系列不同的問題下稱爲測驗的新模型。我最終想在Django admin中獲得一個按鈕「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」這樣的屬性用於繪製矢量作爲問題等,所以我不只是想爲所有問題類型使用相同的模型,因爲每次都會在管理員中顯示所有屬性。
我想要的流量是:
登錄到管理--->選擇一個測驗,或者單擊「添加新的QUIZ」 --->一旦測驗已經建立,應該有一個按鈕「SELECT QUESTION TYPE」--->在選擇一個問題類型時,它應該填充該問題類型的屬性,我將填寫並保存(或添加另一個問題類型)。
下面是教程留給我的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只是一個框架。它只是把所有東西放在一起,並給你使用它的常用方法。如果你有一些特殊的功能,特別是頁面的效果,你必須自己開發它們。 –