Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从另一个应用程序Django获取数据_Python_Django_Mongoengine - Fatal编程技术网

Python 如何从另一个应用程序Django获取数据

Python 如何从另一个应用程序Django获取数据,python,django,mongoengine,Python,Django,Mongoengine,我正在使用Django和MongoEngine创建一个测验项目。多项选择题和测验是两个独立的应用程序。我想根据m_id(每个选择题的唯一编号)获取测验中的选择题。我是初学者,需要一些帮助。我如何实现这一MCQS模型 from django_mongoengine import Document, EmbeddedDocument, fields class multichoice(Document): m_id = fields.IntField(min_value=1, verbose

我正在使用Django和MongoEngine创建一个测验项目。多项选择题和测验是两个独立的应用程序。我想根据m_id(每个选择题的唯一编号)获取测验中的选择题。我是初学者,需要一些帮助。我如何实现这一MCQS模型

from django_mongoengine import Document, EmbeddedDocument, fields
class multichoice(Document):
    m_id = fields.IntField(min_value=1, verbose_name='MCQ Id')
    m_title = fields.StringField(primary_key=True, max_length=255, verbose_name='Title')
    m_question = fields.StringField(verbose_name='Question')
    m_alternatives = fields.ListField(fields.StringField(),verbose_name='Alternatives')
    
    def __str__(self):
        return self.m_title
from django_mongoengine import Document, EmbeddedDocument, fields
from mcqs.models import *
class quiz(Document):
    q_id = fields.IntField(min_value=1, verbose_name='Quiz ID')
    q_title = fields.StringField(primary_key=True, max_length=255, verbose_name='Title')
    q_s_description = fields.StringField(max_length=255, verbose_name='Description')
    q_questions = fields.ListField(fields.IntField(), verbose_name='Question Numbers', blank=True)

    def __str__(self):
        return self.q_title
测验模式

from django_mongoengine import Document, EmbeddedDocument, fields
class multichoice(Document):
    m_id = fields.IntField(min_value=1, verbose_name='MCQ Id')
    m_title = fields.StringField(primary_key=True, max_length=255, verbose_name='Title')
    m_question = fields.StringField(verbose_name='Question')
    m_alternatives = fields.ListField(fields.StringField(),verbose_name='Alternatives')
    
    def __str__(self):
        return self.m_title
from django_mongoengine import Document, EmbeddedDocument, fields
from mcqs.models import *
class quiz(Document):
    q_id = fields.IntField(min_value=1, verbose_name='Quiz ID')
    q_title = fields.StringField(primary_key=True, max_length=255, verbose_name='Title')
    q_s_description = fields.StringField(max_length=255, verbose_name='Description')
    q_questions = fields.ListField(fields.IntField(), verbose_name='Question Numbers', blank=True)

    def __str__(self):
        return self.q_title
MCQ视图

def view_multichoice(request, m_id):
    get_md = multichoice.objects(m_question_number = m_id)
    return render(request, 'mcqs/mcq.html', {'get_md':get_md})
def view_quiz(request, q_id):
    get_q = quiz.objects(q_id = q_id)
    return render(request, 'quiz/quiz.html', {'get_q':get_q})
from django.shortcuts import render
from django.http import HttpResponse
from .models import *
from mcqs.models import *
def view_quiz(request, q_id):

    quiz_object = quiz.objects(q_id=q_id)[0]
    multichoice_objects = [multichoice.objects(m_id=id) for id in quiz_object.q_questions]
    get_q = [objects[0].m_question for objects in multichoice_objects if objects]
    return render(request, 'quiz/quiz.html', {'get_q':get_q})
测验视图

def view_multichoice(request, m_id):
    get_md = multichoice.objects(m_question_number = m_id)
    return render(request, 'mcqs/mcq.html', {'get_md':get_md})
def view_quiz(request, q_id):
    get_q = quiz.objects(q_id = q_id)
    return render(request, 'quiz/quiz.html', {'get_q':get_q})
from django.shortcuts import render
from django.http import HttpResponse
from .models import *
from mcqs.models import *
def view_quiz(request, q_id):

    quiz_object = quiz.objects(q_id=q_id)[0]
    multichoice_objects = [multichoice.objects(m_id=id) for id in quiz_object.q_questions]
    get_q = [objects[0].m_question for objects in multichoice_objects if objects]
    return render(request, 'quiz/quiz.html', {'get_q':get_q})
当前结果 预期结果

编辑1
测验视图

def view_multichoice(request, m_id):
    get_md = multichoice.objects(m_question_number = m_id)
    return render(request, 'mcqs/mcq.html', {'get_md':get_md})
def view_quiz(request, q_id):
    get_q = quiz.objects(q_id = q_id)
    return render(request, 'quiz/quiz.html', {'get_q':get_q})
from django.shortcuts import render
from django.http import HttpResponse
from .models import *
from mcqs.models import *
def view_quiz(request, q_id):

    quiz_object = quiz.objects(q_id=q_id)[0]
    multichoice_objects = [multichoice.objects(m_id=id) for id in quiz_object.q_questions]
    get_q = [objects[0].m_question for objects in multichoice_objects if objects]
    return render(request, 'quiz/quiz.html', {'get_q':get_q})
测验模板

{{ get_q }}

您正在按原样返回问题文档。您应该做的是,获取与问题ID对应的多选文档,然后从每个文档中获取问题字段

将测验视图中的第二行更改为:

# Get the question document corresponding to given id
# objects method returns a list. Get the first one out of it. 
# Here, I've assumed there's exactly 1 quiz document per ID. Handle the edge cases

quiz_object = quiz.objects(q_id = q_id)[0] 

# Get the multiple choice documents corresponding to the ids in q_questions list
# Remember that objects method returns a list. Hence this is a list of lists
 
multichoice_objects = [multichoice.objects(m_id=id) for id in quiz_object.q_questions]

# Get the actual questions from the multichoice documents

get_q = [objects[0].m_question for objects in multichoice_objects if objects]
理想情况下,您应该将multichoice设置为嵌入式文档,并将测验模型中的
q_questions
字段设置为嵌入式文档列表字段。但是这里的缺点是,您不能独立地查询嵌入的文档。因此,您将无法执行
多选.objects(m\u question\u number=m\u id)


您可以阅读更多关于EmbeddedDocuments的信息

我得到了一个空列表。代码在编辑1中。您可以显示这两个集合吗?工作正常。数据库中有一个程序。谢谢你的帮助