python-在Django中查询查询集?尝试返回一个步骤,然后返回其下的子步骤

python-在Django中查询查询集?尝试返回一个步骤,然后返回其下的子步骤,第1张

概述我认为这实际上是非常直观的,但我无法弄清楚.因此,我有一个名为SWS_Document的模型.然后,我有SWS_Document_Step,它具有SWS_Document的外键.接下来,我有第三个模型SWES_Step,它具有SWS_Document_Step的外键.本质上,SWES_Document_Step是SWS_Document_Step的子步骤.例

我认为这实际上是非常直观的,但我无法弄清楚.

因此,我有一个名为SWS_document的模型.然后,我有SWS_document_Step,它具有SWS_document的外键.接下来,我有第三个模型SWES_Step,它具有SWS_document_Step的外键.本质上,SWES_document_Step是SWS_document_Step的子步骤.

例.将是“将黄油混入配方中”将是SWS_document_Step.而SWES_document_Step__ID = 1将是“将黄油放入微波炉安全的碗中”. SWES_document_Step__ID = 2将是“微波黄油30秒”.

这些是将黄油混合到配方中的子步骤.

class SWS_document(models.Model):    machines = models.ManyToManyFIEld(Machine,related_name='SWS_documents')    document_description = models.CharFIEld(max_length=150,default="")    pub_date = models.DateTimeFIEld(auto_Now=True)class SWS_document_Step(models.Model):    STEP_TYPE_CHOICES = (        ('People','People'),('Quality','Quality'),('VeLocity','VeLocity'),('Cost','Cost'),)    document_number = models.ForeignKey(SWS_document,on_delete=models.CASCADE)    sws_sequence_number = models.PositiveIntegerFIEld(editable=True,null=True)class SWES_Step(models.Model):    STEP_TYPE_CHOICES = (        ('People',)    sws_document_ID = models.ForeignKey(SWS_document_Step,on_delete=models.CASCADE,null=True)    swes_description = models.CharFIEld(max_length=500)    swes_step_type = models.CharFIEld(max_length=8,choices=STEP_TYPE_CHOICES,blank=True)    pub_date = models.DateTimeFIEld(auto_Now=True)

因此,在我的vIEw.py中,我采取了所有措施.

def documentVIEw(request,document_ID):    # final goal should be to pass a List full of Lists...    # e.g. [    #[name1,[hazard1,hazard2],[assessment1,assessment2]],#[name2,[hazard3,hazard4],[assessment3,assessment4]],#]    steps = []    swsallsteps = SWS_document_Step.objects.filter(document_number=document_ID)    swesallsteps = SWES_Step.objects.filter(sws_document_ID=document_ID)    return render(request,'StandarDWorkdocuments/document.HTML',{        'swsallsteps': swsallsteps,'swesallsteps': swesallsteps,})

然后在document.HTML中,有一些for循环.

{% for step in swsallsteps %}    <button class='collapsible'>{{ step.sws_sequence_number }} - {{ step.sws_work_element_description}} - <em><b>{{step.sws_step_type}}</b></em> - published - {{step.pub_date}}</button>    <div >        {% for swessteps in swesallsteps %}            <p>{{swessteps.swes_description}}</p>        {% endfor %}    </div>{% endfor %}

本质上,我相信我要获取的是查询中的queryset.这样就可以了[[将黄油混入食谱中,[将黄油放入微波炉安全的碗中,将黄油微波30秒]]

This is what I’m currently getting

This is what I’d hope to get,with a few dumby points put in to show for example最佳答案您可以(并且应该)通过父项访问嵌套项. Django文档中有一些关于访问相关对象的有用的examples,在question中,您可以找到有关访问相关对象的更详细的清单.例如,related_name属性可以替换model_set语法并提高可读性(如果选择适当的话).

您的第二个循环应如下所示:

{% for swes_step in step.swes_step_set.all %}    <p>{{swes_step.swes_description}}</p>{% endfor %}

现在,您不是从单独的查询集中而是从父步骤访问第二步骤级别.您可以抓取第二个查询集(swesallsteps).

为了避免发出大量的数据库查询,您应该使用prefetch_related以尽可能少的步骤获取所有数据:

swsallsteps = (SWS_document_Step.objects    .filter(document_number=document_ID)    .prefetch_related('swes_step_set'))
总结

以上是内存溢出为你收集整理的python-在Django中查询查询集?尝试返回一个步骤,然后返回其下的子步骤 全部内容,希望文章能够帮你解决python-在Django中查询查询集?尝试返回一个步骤,然后返回其下的子步骤 所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1199642.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存