Ich habe ein Problem, für das ich keine einfache Lösung finden kann, mit Flask-Admin mit MongoEngine. Ich habe eine Document-Klasse mit dem Namen ExerciseResourceContent
. Es hat ein „Fragen“ Attribut, das ein ListField
ein EmbeddedDocument
ExerciseQuestion
genannt ist:Umgang mit MongoEngine DynamicEmbeddedDocument in Flask-Admin
class ExerciseResourceContent(ResourceContent):
"""An exercise with a list of questions."""
## Embedded list of questions
questions = db.ListField(db.EmbeddedDocumentField(ExerciseQuestion))
Das ExerciseQuestion
Dokument ist eigentlich ein DynamicEmbeddedDocument
:
class ExerciseQuestion(db.DynamicEmbeddedDocument):
"""
Generic collection, every question type will inherit from this.
Subclasses should override method "without_correct_answer" in order to define the version sent to clients.
Subclasses of questions depending on presentation parameters should also override method "with_computed_correct_answer".
"""
_id = db.ObjectIdField(default=ObjectId)
## Question text
question_text = db.StringField(required=True)
## Correct answer (field type depends on question type)
correct_answer = db.DynamicField()
Es kann in zwei Klassen unterklassiert wird (mehr kommen): MultipleAnswerMCQExerciseQuestion und UniqueAnswerMCQExerciseQuestion:
class MultipleAnswerMCQExerciseQuestion(ExerciseQuestion):
"""Multiple choice question with several possible answers."""
## Propositions
propositions = db.ListField(db.EmbeddedDocumentField(MultipleAnswerMCQExerciseQuestionProposition))
## Correct answer
correct_answer = db.ListField(db.ObjectIdField())
class UniqueAnswerMCQExerciseQuestion(ExerciseQuestion):
"""Multiple choice question with one possible answer only."""
## Propositions
propositions = db.ListField(db.EmbeddedDocumentField(UniqueAnswerMCQExerciseQuestionProposition))
## Correct answer
correct_answer = db.ObjectIdField()
Wenn ich Flask-Admin verwende, um eine ExerciseResourceContent
zu erstellen oder zu bearbeiten, wird eine "Fragen" -Liste angezeigt, aus der ich ein "Question_text" -Attribut bearbeiten kann, aber weder das "Correct_Answer" -Attribut noch ein "Propositions" -Attribut wie ich es tun würde. Ich habe mit dem Flask-Admin-Dokument gekämpft, aber es scheint, dass es ein Problem mit Dynamic-Objekten (Feldern oder Dokumenten) ist, und in den Dokumenten ist nichts dabei.
Danke für Ihre Hilfe
Während dieser Code kann Beantworten Sie die Frage und geben Sie einen zusätzlichen Kontext an, warum und/oder wie dieser Code die Frage beantwortet, verbessert sie den langfristigen Wert. –