Я только что закончил учебник по опросам 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)
Спасибо заранее и любые другие предложения приветствуются!
Спасибо за ваш ответ. Это кажется более сложным, чем я надеялся. Я надеялся, что есть некоторая встроенная функциональность для работы с выбором из нескольких связанных объектных моделей, но я думаю, что не все легко ... –
Да, это так. Django - это всего лишь фреймворк. Он просто собрал все вместе и дал вам очень общий способ его использования. Если у вас есть специальные функции, особенно эффекты страниц, вы должны сами разработать их. –