首页 > 解决方案 > 检索具有相同外键值的元素django python

问题描述

请问,我怎样才能在我的网页上获得所有具有相同外键的元素;我使用mysql数据库存储所有数据;然后我发送查询以将所有数据从 mysql 数据库获取到我的页面 html,我尝试在其中进行过滤,但它没有用。models.py:类 tsf(models.Model):

 perimetre = models.FloatField(blank=False, null=True)
    production_tsf = models.ForeignKey(production, on_delete=models.CASCADE, null=True, blank=False)
    tsf_periode_1 = models.ForeignKey(periode_1, on_delete=models.CASCADE, null=True, blank=False)
    tsf_periode_2 = models.ForeignKey(periode_2, on_delete=models.CASCADE, null=True, blank=True)
    tsf_periode_3 = models.ForeignKey(periode_3, on_delete=models.CASCADE, null=True, blank=True)
    tsf_periode_4 = models.ForeignKey(periode_4, on_delete=models.CASCADE, null=True, blank=True)
    def __str__(self):
        return str(self.perimetre) if self.perimetre else ''

视图.py:

def tsf_projet(request, id_production):
    new_tsf = forms.tsf_form()
    diction={'tsf_configuration':new_tsf, 'title':"configuration de la TSF" }

    if request.method== 'POST':
        new_tsf = forms.tsf_form(request.POST)
        if new_tsf.is_valid():
            new_tsf.save(commit=True)

            perimetre = new_tsf.cleaned_data['perimetre']
            tsf_periode_1 = new_tsf.cleaned_data['tsf_periode_1']
            tsf_periode_2 = new_tsf.cleaned_data['tsf_periode_2']
            tsf_periode_3 = new_tsf.cleaned_data['tsf_periode_3']
            tsf_periode_4 = new_tsf.cleaned_data['tsf_periode_4']

            diction.update({'perimetre':perimetre})
            diction.update({'tsf_periode_1':tsf_periode_1})
            diction.update({'tsf_periode_2':tsf_periode_2})
            diction.update({'tsf_periode_3':tsf_periode_3})
            diction.update({'tsf_periode_4':tsf_periode_4})
            #return production_liste(request)
    prod = production.objects.filter()
    tsf_new=tsf.objects.filter()
    diction={'tsf_affichage':tsf_new, 'tsf_configuration':new_tsf, 'title':"configuration de la TSF", 'affichage_nom':prod}

    return render(request, 'simulation/tsf_projet.html', context=diction)

html文档:

{% for ts in tsf_affichage  %}
{% for af in affichage_nom %}
  {% if af.id == ts.production_tsf_id %} <!--comment je fais le filtre ?-->
<tr>
  <td> {{ts.production_tsf.nom}}  </td>
  <td></td>
  <td> {{ts.perimetre}}  </td>
  <td></td>

  <td> {{ts.tsf_periode_1.taxe}} </td>
  <td></td>
  <td> {{ts.tsf_periode_2.taxe}} </td>
  <td></td>
  <td> {{ts.tsf_periode_3.taxe}} </td>
  <td></td>
  <td> {{ts.tsf_periode_4.taxe}} </td>
  <td></td>
  <td> {{ts.production_tsf.calcule_production}} </td>
  {% endif %}
  {% endfor %}
    {% endfor %}
</tr>

标签: pythonmysqldjangoviewrequest

解决方案


我处于类似情况并正在寻找解决方案。我有以下型号

class Session(models.Model):
    name = models.CharField(max_length=100)                   
    groups = models.IntegerField()
 
class GroupPin(models.Model):
    session = models.ForeignKey(Session,on_delete=models.CASCADE)
    pin = models.CharField(max_length=6)

我想访问会话的所有组别针。我做了以下事情:我在模板中传递了一个会话对象,并使用以下代码访问所有关联的 grouppin 对象。

{% for g_pin in session.grouppin_set.all%}
  {{g_pin.pin}}
{% endfor %}

因此,“_set.all”将完成所需的工作。

假设您想要获取tsf具有特定外键的所有对象(具有 id_production id 的生产对象),您可以通过将prod = production.objects.filter()line 替换为以下行来简单地传递模板中的生产对象。

prod = production.objects.get(id=production_id) # you need to update this code for the case when the object does not exists.

接下来,将此对象传递给您的模板。

diction={ 'tsf_configuration':new_tsf, 'title':"configuration de la TSF", 'production':prod}

最后,您只需要更新您的模板如下


{% for ts in production.tsf_set.all %}
  <tr>
   <td> {{ts.production_tsf.nom}}  </td>
   <td></td>
   <td> {{ts.perimetre}}  </td>
   <td></td>

   <td> {{ts.tsf_periode_1.taxe}} </td>
   <td></td>
   <td> {{ts.tsf_periode_2.taxe}} </td>
   <td></td>
   <td> {{ts.tsf_periode_3.taxe}} </td>
   <td></td>
   <td> {{ts.tsf_periode_4.taxe}} </td>
   <td></td>
   <td> {{ts.production_tsf.calcule_production}} </td>
 </tr>
{% endfor %}


推荐阅读