Bonjour,
Je suis débutant avec Django et j'ai réussi à installer Django sur mon Mac.
J'ai suivi des vidéos pour utiliser ma database qui contient 1 millions de mesures et plusieurs table jointent.
J'ai aussi créé mes views, mon modèle et tout fonctionne.
Maintenant je fais face à un problème que je n'arrive pas résoudre depuis 5 jours.
J'ai une tables Fields qui contient mes champs et j'ai une table Stations qui contient mes stations.
Les stations appartiennent à un terrain. La colonne fields_id_field contient l'id de Fields
Pièce jointe 622884
Pièce jointe 622912
voici un extrait de mon fichier models.py
Mon problème.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 class Fields(models.Model): id_field = models.AutoField(primary_key=True) countries_country = models.ForeignKey(Countries, models.DO_NOTHING) states_id_state = models.ForeignKey('States', models.DO_NOTHING, db_column='states_id_state') field_name = models.CharField(max_length=20) field_longname = models.CharField(max_length=45, blank=True, null=True) field_lat = models.DecimalField(max_digits=8, decimal_places=6, blank=True, null=True) field_lng = models.DecimalField(max_digits=8, decimal_places=6, blank=True, null=True) field_alt = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True) threshold = models.IntegerField(blank=True, null=True) city = models.CharField(max_length=45, blank=True, null=True) cp = models.CharField(max_length=45, blank=True, null=True) field_created = models.DateTimeField() field_active = models.BooleanField() #def __str__(self): # return '[%s] %s' % (self.id_field, self.field_longname) class Meta: managed = False db_table = 'fields' class Stations(models.Model): id_station = models.AutoField(primary_key=True) fields_id_field = models.ForeignKey(Fields, models.DO_NOTHING, db_column='fields_id_field') stations_types_id_stations_type = models.IntegerField() station_name = models.CharField(max_length=20) station_longname = models.CharField(max_length=45, blank=True, null=True) station_active = models.BooleanField() station_archive = models.BooleanField() station_lat = models.FloatField(blank=True, null=True) station_lng = models.FloatField(blank=True, null=True) station_alt = models.DecimalField(max_digits=6, decimal_places=2, blank=True, null=True) installed = models.DateTimeField() station_description = models.TextField(blank=True, null=True) ttn_app_id = models.CharField(max_length=20) ttn_dev_id = models.CharField(max_length=20) ttn_hardware_serial = models.CharField(max_length=20) station_created = models.DateTimeField() station_order = models.IntegerField() map = models.BooleanField() class Meta: managed = False db_table = 'stations'
J'arrive à afficher dans mon template tous mes Fields qui sont actifs et les stations qui sont associées de cette manière
etcCitation:
-Fields 1
-- Station 1
-- Station 3
- Fields 2
-- Station 2
-- Station4
Code:
1
2
3
4
5
6
7
8
9
10 #views def index(request): """Return the active fields.""" fields_list = Fields.objects.filter(field_active=1) stations_list = Stations.objects.filter(station_active=1) #if idstation.isNotNull(): # print(idstation) return render(request, 'map/slider.html', {'fields_list': fields_list, 'stations_list': stations_list})
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 <div> {% if fields_list %} <h4>Terrains</h4> <ul> {% for field in fields_list %} <li> ({{ field.id_field}}){{ field.field_name}} <ul> {% for station in stations_list %} {% if station.fields_id_field.id_field == field.id_field %} <li> <a href="{% url 'map:sensors' station.id_station %}">{{ station.id_station }} ({{ station.station_longname }} ({{ station.fields_id_field.id_field }})</a> </li> {% endif %} {% endfor %} </ul> </li> {% endfor %} </ul> {% else %} <p>No fields are available.</p> {% endif %} </div>
Mais on me dit que je n'ai pas besoin de faire ceci
car Django est capable de le faire lui-même.Code:{% if station.fields_id_field.id_field == field.id_field %}
Alors j'essaye de le faire autrement, et je n'y arrive absolument, pas j'aimerais que vous m'aidiez.
On m'a dit que ceci était une piste
mais cela me génère une erreurCode:
1
2 fields_list = Fields.objects.filter(field_active=1) fields_list.stations_set.all() # Il faudrait qu'il filtre que les stations actives (station_active=1)
J'aimerais donc savoir qu'elle est la syntaxe correcte pour pouvoir, dans mon template, faire un for sur ma variable et afficher mes terrains et stations en fonction de l'objet fields_list. En PHP je faisait un JOIN, mais apparememnt Django gère ceci, mais hélas, je n'arrive pas trouver la bonne syntaxeCitation:
‘QuerySet’ object has no attribute ‘stations_set’
Voyez-vous?
Je vous remercie tout plein