python - Manejo del DynamicEmbeddedDocument de MongoEngine en Flask-Admin
(2)
Me parece que tienes que personalizar la vista de administrador para tus modelos. Es una tarea que debe hacer para sus modelos si no se muestran correctamente "fuera de la caja".
En la mayoría de los casos, no es necesario volver a escribir las vistas por completo. En la mayoría de los casos, será suficiente para personalizar las vistas integradas.
No tengo ninguna experiencia en el desarrollo de matraz, pero básicamente tendrá que subclasificar ModelView
. y registra la subclase al administrador.
#Customized admin views
class ExerciseQuestionView(ModelView):
#
# add customisation code here
#
class MultipleAnswerMCQExerciseQuestionView(ModelView):
#
# add customisation code here
#
class UniqueAnswerMCQExerciseQuestionView(ModelView):
#
# add customisation code here
#
if __name__ == ''__main__'':
# Create admin
admin = admin.Admin(app, ''Example: MongoEngine'')
# Add admin views
admin.add_view(ExerciseQuestionView(ExerciseQuestion))
admin.add_view(MultipleAnswerMCQExerciseQuestionView(MultipleAnswerMCQExerciseQuestion))
admin.add_view(UniqueAnswerMCQExerciseQuestionView(UniqueAnswerMCQExerciseQuestion))
#...
De todos modos, creo que deberías revisar la documentación ... o puedes terminar esperando demasiado aquí ...
http://flask-admin.readthedocs.io/en/latest/api/mod_contrib_mongoengine/
Tengo un problema para el que no puedo encontrar una solución simple, usando Flask-Admin con MongoEngine. Tengo una clase de documento llamada ExerciseResourceContent
. Tiene un atributo de "preguntas", que es un ListField
de un EmbeddedDocument
llamado ExerciseQuestion
:
class ExerciseResourceContent(ResourceContent):
"""An exercise with a list of questions."""
## Embedded list of questions
questions = db.ListField(db.EmbeddedDocumentField(ExerciseQuestion))
El documento ExerciseQuestion
es en realidad 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()
Puede ser subclasificado en dos clases (más por venir): MultipleAnswerMCQExerciseQuestion y 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()
Cuando uso Flask-Admin para crear o editar un ExerciseResourceContent
, muestra una lista de "Preguntas", desde la cual puedo editar un atributo "Question_text", pero no puedo ver el atributo "Correct_Answer", ni ningún atributo "Propositions" como Me gustaría. Luché con el documento Flask-Admin, pero parece que es un problema con las cosas dinámicas (campos o documentos), y no hay nada al respecto en los documentos.
Gracias por tu ayuda
import time
sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY"
s = sentence.split()
another = [0]
time.sleep(0.5)
print(sentence)
for count, i in enumerate(s):
if s.count(i) < 2:
another.append(max(another) + 1)
else:
another.append(s.index(i) +1)
another.remove(0)
time.sleep(0.5)
print(another)
file = open("N:/(Filedirectory)","w")
file.write(another)
file.write(s)