问:在django中使用mongoengine进行的dict访问列表

时间:2018-09-21 07:25:28

标签: django python-3.x mongoengine

如何在django中使用mongoengine从词典列表中获取特定词典。 如以下指定的数据结构,如果我想获取具有student_id为“ 1011”的字典。怎么做以及如何只更新那本词典?

像这样的数据结构:

class studentData(Document):
    student_class = StringField(required=True)
    student_list = ListField()

数据库示例中的数据存储:

{
    "student_class":10.
    "student_list":[
        {
            "student_id" : "1011",
            "student_name" : "ABC"
        },
        {
            "student_id" : "1045",
            "student_name" : "XYZ"
        }
    ]
}

我尝试这是给我Student_list,但是如何获取特定词典的列表:

studen_list= studentData.objects.filter(student_class=10).values_list('student_list')[0]

1 个答案:

答案 0 :(得分:2)

为什么不为此目的编写自定义管理器?

class studentData(Document):
    student_class = StringField(required=True)
    student_list = ListField()

    find_inside_student_list = FindInsideStudentManager()

class DahlBookManager(models.Manager):
    def get_queryset(self, student_id):
        for data in super().get_queryset():
            if student_id == data['student_id']:
                return data

student_details= studentData.objects.find_inside_student_list.filter(student_class=10, student_id='1011')

P.S。 :由于某些语法问题,以上代码可能无法正常工作。我编写此代码只是为了了解如何实现它

更新: 我发现了另一种使用本地mongoengine的方法。

class Model(mongoengine.Document):
    student_list = mongoengine.ListField(mongoengine.ReferenceField(StudentDetailsModel))

class StudentDetailsModel(mongoengine.Document):
    student_id = mongoengine.StringField()
    student_name = mongoengine.StringField()



Model.objects.filter(student_id__contains='1011')

您可以详细了解here