f4n*_*4nt 6 python django django-admin
我需要能够创建一个带有20个奇怪的多项选择问题的测验类型应用程序.
我有3种型号:Quizzes,Questions,和Answers.
我想在管理界面中创建一个测验,并内联测验和答案元素.
目标是单击"添加测验",然后转移到包含20个问题字段的页面,每个字段有4个答案字段.
这是我目前的情况:
class Quiz(models.Model):
label = models.CharField(blank=true, max_length=50)
class Question(models.Model):
label = models.CharField(blank=true, max_length=50)
quiz = models.ForeignKey(Quiz)
class Answer(models.Model):
label = models.CharField(blank=true, max_length=50)
question = models.ForeignKey(Question)
class QuestionInline(admin.TabularInline):
model = Question
extra = 20
class QuestionAdmin(admin.ModelAdmin):
inlines = [QuestionInline]
class AnswerInline(admin.TabularInline):
model = Answer
extra = 4
class AnswerAdmin(admin.ModelAdmin):
inlines = [AnswerInline]
class QuizAdmin(admin.ModelAdmin):
inlines = [QuestionInline, AnswerInline]
admin.site.register(Question, QuestionAdmin)
admin.site.register(Answer, AnswerAdmin)
admin.site.register(Quiz, QuizAdmin)
Run Code Online (Sandbox Code Playgroud)
当我尝试添加测验时出现以下错误:
class 'quizzer.quiz.models.Answer'> has no ForeignKey to <class 'quizzer.quiz.models.Quiz'>
Run Code Online (Sandbox Code Playgroud)
这是可行的,还是我试图从Django Admin应用程序中抽出太多东西?
Car*_*yer 14
您不能在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]
Run Code Online (Sandbox Code Playgroud)
AnswerAdmin有一个AnswerInline或QuestionAdmin有一个QuestionInline是没有意义的(除非这些是具有自引用外键的模型).并且QuizAdmin不能有AnswerInline,因为Answer没有测验的外键.
如果Django支持嵌套内联,则逻辑语法将是QuestionInline接受"inlines"属性,您将其设置为[AnswerInline].但事实并非如此.
另请注意,"额外= 20"表示每次测验时,每次测验的底部都会有20个空白问题表格(即使已经有20个实际问题).也许这就是你想要的 - 制作一个长页面,但可以很容易地一次添加很多问题.