2017-01-09 64 views
0

我剛剛完成了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) 

感謝的提前,以及其他任何建議,歡迎!

回答

0

OH,這可能是一個大問題。

好的,按照你的問題,當你選擇一些「問題類型」時,頁面上會顯示一些不同的屬性。爲了解決這個問題,你需要幾個步驟來做。

  1. 使用Ajax,JavaScript或JQuery的TECH擺脫模板頁面的用戶的選擇,然後發送一個請求(POST/GET),以一種特殊的方法(例如,/管理/ get_choice)
  2. 成立這個方法的url(url(r'^/admin/get_choice/$',get_choice))。
  3. 在方法get_choice,獲取參數作爲一個選項,從數據庫中搜索結果,然後把結果返回到模板頁面。
  4. 在模板頁面上,使用AJAX,Javascript或JQuery TECH在模板頁面上顯示結果。
  5. 將一切發送到將結果保存到數據庫的方法。
  6. 完成。

我希望這可以給你一些建議。

+0

感謝您的回覆。這看起來比我希望的更復雜。我希望有一些內置的功能可以處理從多個相關對象模型中進行選擇,但我想並非一切都很簡單...... –

+0

是的。 Django只是一個框架。它只是把所有東西放在一起,並給你使用它的常用方法。如果你有一些特殊的功能,特別是頁面的效果,你必須自己開發它們。 –

相關問題