<Klasse> hat keine Fremdschlüssel <Klasse> in Django, wenn Sie versuchen, um inline-Modelle
Ich muss in der Lage sein erstellen Sie eine quiz-Typ-Anwendung mit 20 einige ungerade multiple-choice-Fragen.
Habe ich 3 Modelle: Quizzes
, Questions
, und Answers
.
Möchte ich in das admin-interface zu erstellen, ein quiz, und inline-quiz-und-Antwort-Elemente.
Ziel ist es, klicken Sie auf "Quiz Hinzufügen", und übertragen auf eine Seite mit 20 Frage-Felder, mit 4 Antwortfelder pro im Ort.
Hier ist, was ich derzeit habe:
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)
Bekomme ich die folgende Fehlermeldung, wenn ich versuche, um ein quiz hinzuzufügen:
class 'quizzer.quiz.models.Answer'> has no ForeignKey to <class 'quizzer.quiz.models.Quiz'>
Ist das machbar, oder bin ich versucht, zu viel Zug aus der Django-Admin-app?
InformationsquelleAutor f4nt | 2009-03-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht "verschachtelten" inlines in der Django-admin (d.h. man kann nicht ein Quiz mit inline-Fragen, mit jeder inline-Frage mit inline-Antworten). So müssen Sie Abstriche machen nur mit inline-Fragen (dann, wenn Sie navigieren Sie zu anzeigen eine einzige Frage, die es haben könnte, inline-Antworten).
Also deine Modelle sind gut, aber deine admin-code sollte wie folgt Aussehen:
Macht es keinen Sinn für AnswerAdmin eine AnswerInline, oder QuestionAdmin eine QuestionInline (es sei denn, diese wurden Modelle mit eine auf sich selbst verweisende foreign key). Und QuizAdmin können nicht über ein AnswerInline, denn die Antwort hat keine foreign key-Quiz.
Wenn Django unterstützt hat, verschachtelten inlines, die logische syntax wäre für QuestionInline zu akzeptieren "inlines" - Attribut, denen Sie dann auf [AnswerInline]. Aber es funktioniert nicht.
Beachten Sie auch, dass "extra = 20" bedeutet, Sie haben 20 leere Fragebögen am Ende jedes Quiz, jedes mal, wenn Sie laden Sie es (auch wenn es bereits über 20 aktuelle Fragen). Vielleicht ist das, was Sie wollen - sorgt für eine lange Seite, aber macht es einfach hinzufügen viele Fragen auf einmal.
InformationsquelleAutor Carl Meyer
Lassen Sie uns Folgen Sie durch, Schritt um Schritt.
Den Fehler: "die Antwort hat keine FK-Quiz".
Richtig. Die Antwort Modell hat keine FK-Quiz. Es hat ein FK in Frage zu stellen, aber nicht Quiz.
Warum Beantworten müssen eine FK-quiz?
Den QuizAdmin hat eine AnswerInline und ein QuestionInline. Für einen admin zu haben, inlines, es bedeutet, dass die inline-Modelle (Antwort und Frage) muss die FK ' s zu den übergeordneten admin.
Let ' s überprüfen. Frage hat eine FK-Quiz.
Und. Antwort hat keine FK-Quiz. So Ihr Quiz admin verlangt eine FK, die Ihr Modell fehlt. Das ist der Fehler.
InformationsquelleAutor S.Lott
Richtig: zu versuchen, Sie zu viel aus der admin-app: -) Inline-Modelle benötigen ein Fremdschlüssel auf die Eltern-Modell.
InformationsquelleAutor Van Gale