Вы не можете сделать «вложенные» строки в администраторе Django (т. Е. У вас не может быть викторины со встроенными вопросами, каждый встроенный вопрос имеет встроенные ответы). Поэтому вам нужно понизить прицел до наличия встроенных Вопросов (тогда, если вы перейдете к просмотру одного Вопроса, у него могут быть встроенные Ответы).
Так что с вашими моделями все в порядке, но ваш код администратора должен выглядеть так:
class QuestionInline(admin.TabularInline):
model = Question
extra = 20
class AnswerInline(admin.TabularInline):
model = Answer
extra = 4
class QuestionAdmin(admin.ModelAdmin):
inlines = [AnswerInline]
class AnswerAdmin(admin.ModelAdmin):
pass
class QuizAdmin(admin.ModelAdmin):
inlines = [QuestionInline]
Для AnswerAdmin не имеет смысла иметь AnswerInline, или QuestionAdmin иметь QuestionInline (если это не были модели с самообращающимся внешним ключом). И QuizAdmin не может иметь AnswerInline, потому что у ответа нет внешнего ключа к Quiz.
Если Django действительно поддерживает вложенные строки, логический синтаксис будет для QuestionInline принимать атрибут «inlines», который вы бы установили на [AnswerInline]. Но это не так.
Также обратите внимание, что «extra = 20» означает, что у вас будет 20 пустых форм Вопросов в нижней части каждого Теста, каждый раз, когда вы загружаете его (даже если у него уже есть 20 фактических Вопросов). Может быть, это то, что вы хотите - создает длинную страницу, но позволяет легко добавлять множество вопросов одновременно.