2015-04-03 8 views
16

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 EmbeddedDocumentExerciseQuestion 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

Antwort

0
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) 
+1

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. –

1

Es scheint mir, dass Sie das Admin-Ansicht für Ihre Modelle anpassen müssen. Es ist eine Aufgabe, die Sie für Ihre Modelle ausführen müssen, wenn sie nicht "out of the box" korrekt angezeigt werden.

In den meisten Fällen müssen Sie die Ansichten nicht vollständig neu schreiben. In den meisten Fällen reicht es aus, integrierte Ansichten anzupassen.

Ich habe keine Erfahrung Entwicklung für Kolben, aber Sie müssen im Grunde ModelView Unterklasse sein. und registrieren Sie die Unterklasse an den Admin

#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)) 
    #... 

Auf jeden Fall denke ich, Sie durch die Dokumentation gehen sollte ... oder Sie können zu lange hier warten am Ende ...

http://flask-admin.readthedocs.io/en/latest/api/mod_contrib_mongoengine/