Ho un problema per il quale non riesco a trovare una soluzione semplice, utilizzando Flask-Admin con MongoEngine. Ho una classe documento denominata ExerciseResourceContent
. Ha un attributo "domande", che è un ListField
di un EmbeddedDocument
chiamato ExerciseQuestion
:Gestione di DynamicEmbeddedDocumento di MongoEngine in Flask-Admin
class ExerciseResourceContent(ResourceContent):
"""An exercise with a list of questions."""
## Embedded list of questions
questions = db.ListField(db.EmbeddedDocumentField(ExerciseQuestion))
Il documento ExerciseQuestion
è in realtà un 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()
Può essere sottoclassi in due classi (di più per venire): MultipleAnswerMCQExerciseQuestion e 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()
Quando uso Flask-Admin per creare o modificare un ExerciseResourceContent
, visualizza un elenco "Domanda", da cui posso modificare un attributo "Question_text", ma non riesco a vedere l'attributo "Correct_Answer", né alcun attributo "Propositions" come vorrei Ho faticato con il documento Flask-Admin, ma sembra che si tratti di un problema con le cose dinamiche (campi o documenti) e non c'è nulla a riguardo nei documenti.
Grazie per il vostro aiuto
Mentre questo codice può rispondere alla domanda, fornendo un contesto aggiuntivo sul perché e/o su come questo codice risponde alla domanda, migliora il suo valore a lungo termine. –