2015-04-03 15 views
16

Mam problem, dla którego nie mogę znaleźć prostego rozwiązania, używając Flask-Admin z MongoEngine. Mam klasy dokumentu o nazwie ExerciseResourceContent. Ma „pytania” atrybut, który jest ListField o EmbeddedDocument nazywa ExerciseQuestion:Obsługa DynamicEmbeddedDocument MongoEngine w Flask-Admin

class ExerciseResourceContent(ResourceContent): 
    """An exercise with a list of questions.""" 

    ## Embedded list of questions 
    questions = db.ListField(db.EmbeddedDocumentField(ExerciseQuestion)) 

Dokument ExerciseQuestion jest rzeczywiście 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() 

Można podklasy w dwóch klasach (więcej przyjść): MultipleAnswerMCQExerciseQuestion i 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() 

Kiedy używam Flask-Admin do tworzenia lub edycji ExerciseResourceContent, wyświetla się lista "pytań", z której mogę edytować atrybut "Question_text", ale nie widzę atrybutu "Correct_Answer" ani żadnego atrybutu "Propositions" tak jak bym to zrobił. Zmagałem się z dokumentem Flask-Admin, ale wygląda na to, że jest to problem z materiałami dynamicznymi (pola lub dokumenty) i nie ma w tym nic takiego w dokumentach.

Dzięki za pomoc

Odpowiedz

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

Chociaż ten kod może odpowiedzieć na pytanie, zapewniając dodatkowy kontekst dotyczący tego, dlaczego i/lub jak ten kod odpowiada na pytanie, poprawia jego długoterminową wartość. –

1

Wydaje mi się, że trzeba dostosować admin-widok dla swoich modeli. Jest to zadanie, które musisz wykonać dla swoich modeli, jeśli nie są wyświetlane poprawnie "po wyjęciu z pudełka".

W większości przypadków nie trzeba w pełni przepisywać widoków. W większości przypadków wystarczy dostosować niestandardowe widoki.

Nie mam żadnego doświadczenia w opracowywaniu kolb, ale zasadniczo będziesz musiał podać podklasę ModelView. i zarejestrować podklasy do administratora

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

W każdym razie myślę, że należy przejść do dokumentacji ... lub może skończyć się zbyt długie oczekiwanie tutaj ...

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