当前位置:  开发笔记 > 编程语言 > 正文

在尝试内联模型时,<class>在Django中没有<class>的外键

如何解决《在尝试内联模型时,<class>在Django中没有<class>的外键》经验,为你挑选了1个好方法。

我需要能够创建一个带有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)

当我尝试添加测验时出现以下错误:

class 'quizzer.quiz.models.Answer'> has no ForeignKey to 

这是可行的,还是我试图从Django Admin应用程序中抽出太多东西?



1> Carl Meyer..:

您不能在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,因为Answer没有测验的外键.

如果Django支持嵌套内联,则逻辑语法将是QuestionInline接受"inlines"属性,您将其设置为[AnswerInline].但事实并非如此.

另请注意,"额外= 20"表示每次测验时,每次测验的底部都会有20个空白问题表格(即使已经有20个实际问题).也许这就是你想要的 - 制作一个长页面,但可以很容易地一次添加很多问题.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有