1
votes

Django; 2 modèles / classes / tables passent dans un seul modèle

Pardonnez-moi si je demande quelque chose de stupide, je suis très nouveau dans l'industrie du codage

J'ai travaillé sur un projet Django pour créer des tableaux de bord pour montrer le suivi de cas d'une serre hydroponique.

Donc, je crée deux modèles ;

{% extends "base.html" %}
 {% block content %}
{%load staticfiles%}
 {% load static %}
 <div class = "containor">
 <div class ="row" id = "row1">
 <div class ="col-sm-6" style="background-color:">
    <h2>Camera</h2>
 </div>

<div class ="col-sm-6" style="background-color:">
    <h2>Ambinet</h2>
</div>
</div>

<div class = "containor">
    <div class="row" id="row2">
        <div class ="col-sm-6" id="Cam1" style="background-color:">
            <div class="containor">
                <video id="livestream" width="550" height="350" autoplay></video>
                 <canvas class = "my-4 chartjs-render-monitor" id="live_vid" height="1"></canvas>
                <script src="{% static 'FrounterWeb/JS-code/Stream.JS' %}" ></script>
            </div>
        </div>

        <div class ="col-sm-2" id="Humdity" style="background-color:">
            <div class="containor">
                <center>
                    <picture>
                        <img src="{% static 'FrounterWeb/img/Humidty_icon.png' %}" alt="RoomTemp">
                    </picture>
                <br>
                    <h1>
                    {% for ambient in room %}
                         {% if forloop.first %}
                         {{  ambient.Humdity }}
                         {% endif %}
                         {% endfor %}
                    %</h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2" id="Roomtemp" style="background-color:">
            <div class="containor">
                <center>
                    <picture>
                        <img src="{% static 'FrounterWeb/img/RoomTemp.png' %}" alt="RoomTemp">
                    </picture>
                <br>
                    <h1>
                    {% for ambient in room %}
                         {% if forloop.first %}
                         {{  ambient.TempRoom }}
                         {% endif %}
                         {% endfor %}
                    C</h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2" id="co2" style="background-color:">
            <div class="containor">
                <center>
                    <picture>
                        <img src="{% static 'FrounterWeb/img/co2_icon.png' %}" alt="co2">
                    </picture>
                <br>
                    <h1>
                    {% for ambient in room %}
                         {% if forloop.first %}
                         {{  ambient.CO2 }}
                         {% endif %}
                         {% endfor %}
                    </h1>
                </center>
            </div>
        </div>

    </div>
</div>

<div class = "containor" >
    <div class="row" id = "row3" >
        <div class ="col" style="background-color:">
            <center>
                <h2>Water tank</h2>
            </center>
        </div>
        </div>
    </div>
</div>

<div class = "containor">
    <div class="row" id ="row4" >

        <div class ="col-sm-2">
            <div class="containor">
                <center>
                        <picture>
                            <img src="{% static 'FrounterWeb/img/pHicon.png' %}" alt="co2">
                        </picture>
                    <br>
                    <h1>
                    {% for tank_system in tank %}
                         {% if forloop.first %}
                         {{ tank_system.PH }}
                         {% endif %}
                         {% endfor %}
                    </h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2">
            <div class="containor">
                <center>
                        <picture>
                            <img src="{% static 'FrounterWeb/img/EC-icon.png' %}" alt="co2">
                        </picture>
                    <br>
                    <h1>
                    {% for tank_system in tank %}
                         {% if forloop.first %}
                         {{ tank_system.EC }}
                         {% endif %}
                         {% endfor %}
                    %</h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2">
            <div class="containor">
                <center>
                        <picture>
                            <img src="{% static 'FrounterWeb/img/WaterTemp.png' %}" alt="co2">
                        </picture>
                    <br>
                    <h1>
                    {% for tank_system in tank %}
                         {% if forloop.first %}
                         {{ tank_system.TempWater }}
                         {% endif %}
                         {% endfor %}
                    C</h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2">
            <div class="containor">
                <center>
                        <picture>
                            <img src="{% static 'FrounterWeb/img/Flow-icon.png' %}" alt="co2">
                        </picture>
                    <br>
                    <h1>
                    {% for tank_system in tank %}
                         {% if forloop.first %}
                         {{ tank_system.Winlet }}
                         {% endif %}
                         {% endfor %}
                    ml/hr</h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2">
            <div class="containor">
                <center>
                        <picture>
                            <img src="{% static 'FrounterWeb/img/Flow-out-icon.png' %}" alt="co2">
                        </picture>
                    <br>
                    <h1>
                    {% for tank_system in tank %}
                         {% if forloop.first %}
                         {{ tank_system.Woutlet }}
                         {% endif %}
                         {% endfor %}
                    ml/hr</h1>
                </center>
            </div>
        </div>

        <div class ="col-sm-2">
            <div class="containor">
                <center>
                        <picture>
                            <img src="{% static 'FrounterWeb/img/waterlevel-icon.png' %}" alt="Waterlevel">
                        </picture>
                    <br>
                    <h1>
                    {% for tank_system in tank %}
                         {% if forloop.first %}
                         {{ tank_system.tanks }}
                         {% endif %}
                         {% endfor %}
                    L</h1>
                </center>
            </div>
        </div>

    </div>
</div>

<div class = "containor">
    <div class="row" id="row5" >

        <div class ="col-sm-6" >
            <h1>Water data</h1>
        </div>

        <div class ="col-sm-6" >
            <h1>Room data</h1>
        </div>

    </div>
</div>

<div class = "containor">
    <div class="row" id="row6" >

        <div class ="col-sm-6" >
            <div class="float-sm-none" id = Waterchart>

            </div>
        </div>

        <div class ="col-sm-6" >
            <div class="float-sm-none" id = Roomchart>


            </div>
        </div>

    </div>
</div>

et je rend les données de deux modèles en un seul modèle

voici mes vues;

from django.shortcuts import render, get_object_or_404
from CGI.models import tank_system, ambient

def index(request):
    tank = tank_system.objects.all()
    room = ambient.objects.all()
    return render(request, 'CGI/Pages/DashBoard.html', {'tank': tank},{'room': room}) 


0 commentaires

3 Réponses :


2
votes

Vous avez 4 arguments dans votre rendu dont 2 sont le contexte. Il n'a besoin que d'un dictionnaire avec contexte ou vous pouvez créer une variable de dictionnaire de contexte et la passer comme argument dans le rendu.

Essayez ceci:

from django.shortcuts import render, get_object_or_404
from CGI.models import tank_system, ambient

def index(request):
    tank = tank_system.objects.all()
    room = ambient.objects.all()
    context = {
           'tank': tank,
           'room': room  
       }
    return render(request, 'CGI/Pages/DashBoard.html',context) 

OU

from django.shortcuts import render, get_object_or_404
from CGI.models import tank_system, ambient

def index(request):
    tank = tank_system.objects.all()
    room = ambient.objects.all()
    return render(request, 'CGI/Pages/DashBoard.html', {'tank': tank,'room': room}) 


0 commentaires

1
votes

Dans votre méthode d'index, apportez les modifications suivantes:

def index(request):
    tank = tank_system.objects.all()
    room = ambient.objects.all() 
    return render(request, 'CGI/Pages/DashBoard.html', {'tank': tank, 'room': room}) 


0 commentaires

2
votes

Vous pouvez transmettre des données de deux manières différentes

def index(request):
    tank = tank_system.objects.all()
    room = ambient.objects.all()
    return render(request, 'CGI/Pages/DashBoard.html', {'tank': tank,'room': room}) 
                  or 
    return render(request, 'CGI/Pages/DashBoard.html', locals())
locals() stands for get all local variable/objects and pass to the html as context


2 commentaires

Veuillez ne pas utiliser locaux () dans votre code pour cela. C'est vraiment un mauvais style de programmation, ce qui le rend difficile à maintenir.


Je suis d'accord avec vous @dirkgroten. mais pour les petites fonctions, cela semble aller. J'ai compris votre point sur les habitants (). il collectera toutes les données et les enverra en html, mais ici il y a des données qu'il n'est pas nécessaire d'envoyer en html. cette fois au lieu de locaux (), nous pouvons utiliser le contexte.