Django Python:无法通过模型示例访问Manager

w51jfk4q  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(115)

我试图查询一个对象集,并使用对象的数量来执行一个for循环,该循环将呈现每个对象的参数。我使用一个2D数组来存储参数,这样它们就可以根据它们的对象来呈现。我想不只是一个解决方案,但在一般情况下,这样做的更好的方法。我刚接触django
这是来自views.py的代码

def flashcard(response):
    form = Flashcard_verif(response.POST)

    if response.method == "POST" and form.is_valid():
          
        head = form.cleaned_data["header"]
        ques = form.cleaned_data["question"]
        ans = form.cleaned_data["answer"]
            
        flashcard_data = Flashcard(header=head, question=ques, answer=ans)

        # this is where the error is occuring
        flashcard_obj = Flashcard(header=head, question=ques, answer=ans).objects.all()

        rawHeader, rawQuestion, rawAnswer = Flashcard(header=head, question=ques, answer=ans).flash_format()
        
        flashcard_data.save()

        if len(flashcard_lib) > 1:
            for i in range(0, len(flashcard_lib), 1):
                flashcard_lib.append([rawHeader, rawQuestion, rawAnswer])
            
            print(flashcard_lib)
        
            return render(response, "main/Flashcard.html", {
            "form":form,
            "Flashcard_lib":flashcard_lib,
            "flashcard":flashcard_obj})
        else:
            flashcard_lib.append([rawHeader, rawQuestion, rawAnswer])
            print(flashcard_lib)
            
            return render(response, "main/Flashcard.html", {
            "form":form,
            "header":rawHeader, 
            "question":rawQuestion, 
            "answer":rawAnswer
            })
        

    
    else:
        form = Flashcard_verif()
    
    return render(response, "main/Flashcard.html", {
        "form":form})

字符串
这是我使用2d数组的模板:

<div class="flashcard-view" id="flash" style="visibility: hidden">
    {% if Flashcard_lib|length >= 2 %}
        {% for i in flashcard_obj %}
            <div class="flashcard">
            {{ i.0 }}
            {{ i.1 }}
            {{ i.2 }}
            </div>
        {% endfor %}
    {% else %}
        <div class="flashcard">
        {{ header }}
        {{ question }}
        {{ answer }}
        </div>
    {% endif %}
</div>


当我运行服务器时,我注意到if语句执行了,但for循环没有执行。这是一个2合1的问题,我如何让它遍历列表。

bgibtngc

bgibtngc1#

排成一行

flashcard_data = Flashcard(header=head, question=ques, answer=ans)

字符串
你创建了模型Flashcard的示例,但你没有将其保存到db,要做到这一点,你需要做:

flashcard_data.save()


行中发生错误

flashcard_obj = Flashcard(header=head, question=ques, answer=ans).objects.all()


因为你创建了另一个示例(与上面2行的示例具有相同的数据),然后你试图用它来获取obj manager。在Django模型中,示例可以表示为:

  • 单个对象(如您的情况)
  • 作为查询集-特殊的类似列表的结构,为空或包含一个或多个示例。

如果你想得到所有的抽认卡记录在db你需要做的

Flashcard.objects.all()


其中Flashcard-是你的模型,objects-是对象管理器,它可以让你指定你需要什么-Flashcard.objects.all()-返回包含所有示例的查询集Flashcard.objects.filter(...)-返回包含过滤记录的查询集Flashcard.objects.first()-返回第一个对象(不是查询集!)以db等为单位。
不能从示例调用obj管理器

相关问题