gpt4 book ai didi

python - 在 Flask-Admin 中处理 MongoEngine 的 DynamicEmbeddedDocument

转载 作者:太空狗 更新时间:2023-10-29 16:58:32 25 4
gpt4 key购买 nike

我有一个问题,我无法找到一个简单的解决方案,将 Flask-Admin 与 MongoEngine 结合使用。我有一个名为 ExerciseResourceContent 的文档类。它有一个“问题”属性,它是一个名为 ExerciseQuestionEmbeddedDocumentListField:

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

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

ExerciseQuestion 文档实际上是一个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()

它可以分为两个类(更多):MultipleAnswerMCQExerciseQuestion 和 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()

当我使用 Flask-Admin 创建或编辑 ExerciseResourceContent 时,它会显示一个“问题”列表,我可以从中编辑“Question_text”属性,但看不到“Correct_Answer” “属性,也不是我想要的任何“命题”属性。我在 Flask-Admin 文档中苦苦挣扎,但这似乎是动态内容(字段或文档)的问题,文档中没有任何内容。

谢谢你的帮助

最佳答案

在我看来,您必须为您的模型自定义管理 View 。如果您的模型没有“开箱即用”地正确显示,这是您必须为模型做的一项任务。

在大多数情况下,您不必完全重写 View 。在大多数情况下,自定义内置 View 就足够了。

我没有任何 Flask 开发经验,但您基本上必须继承 ModelView。并将子类注册到管理员

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

无论如何,我认为您应该阅读文档...否则您可能会在这里等待太久...

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

关于python - 在 Flask-Admin 中处理 MongoEngine 的 DynamicEmbeddedDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29436798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com