2017-01-09 7 views
0

Я только что закончил учебник по опросам Django. В учебнике вы по существу строите вопрос с множественным выбором (вопрос с соответствующими вариантами). Затем вы настраиваете администратора таким образом, чтобы вы получили эту замечательную кнопку «ADD CHOICE». (Я люблю Django до сих пор)(Post postls tutorial) Django admin: добавив новый родственный тип модели (бесплатный ответ, true/false и т. Д.), Как добавить администратора Django

Я хочу создать приложение для викторины, которое также имеет другие типы вопросов, такие как free-response, true/false и т. Д., И собирать серию разных вопросов под новой моделью Quiz , В конечном итоге я хочу получить кнопку «SELECT QUESTION TYPE» в администраторе Django, но как мне это сделать?

Вот моя попытка моих моделей:

(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» для рисования векторов как вопроса и т. поэтому я не просто хочу использовать одну и ту же модель для всех типов вопросов, потому что все атрибуты будут отображаться в админах каждый раз.

Я хочу, чтобы поток быть:

Войдите в админ ---> Выберите тест, или нажмите «ДОБАВИТЬ НОВЫЙ ВИКТОРИН» ---> После викторины была создана, должно быть кнопка «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

О, это может быть большой вопрос.

OK, Следуйте своим вопросом, когда вы выбираете какой-либо «Тип вопроса», на странице отображаются разные атрибуты. Для решения этой проблемы вам нужно выполнить несколько шагов.

  1. использование AJAX, JavaScript или JQuery TECH, чтобы получить выбор пользователя на странице шаблона, а затем отправить запрос (сообщение/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 - это всего лишь фреймворк. Он просто собрал все вместе и дал вам очень общий способ его использования. Если у вас есть специальные функции, особенно эффекты страниц, вы должны сами разработать их. –