Ciao  a tutti,
è circa mese ormai che ci sto impazzendo, ma sicuramente mi mancano delle basi che non mi permettono di trovare una soluzione.
In sostanza ho due modelli di tabella database:
Il primo e la lista marca modello di personal computers.
Il secondo la lista degli accessori di ogni personal computer presente nella prima tabella
Le due tabelle hanno la chiave ID che li lega.
Nel file model.py in allegato la struttura del db.
class tbPersonalComputer(models.Model):
    Marca = models.CharField(max_length=5)
    Modello = models.CharField(max_length=120)
    Prezzo = models.FloatField()

    def __str__(self):
        return self.Marca + ' ' + self.Modello + ' € ' + str(self.Prezzo)

    def id(self):
        return self.id

    class Meta:
        verbose_name = "Personal Computer"
        verbose_name_plural = "Personal Computers"


class tbElemento(models.Model):
    Elemento = models.CharField(max_length=50)
    Prezzo = models.FloatField()
    PersonalComputer = models.ForeignKey(tbPersonalComputer, on_delete=models.CASCADE, related_name="elementi")

    def __str__(self):
        return self.Elemento

    def get_id(self):
        return self.PersonalComputer_id

    def id(self):
        return self.id

    class Meta:
        verbose_name = "Elemento"
        verbose_name_plural = "Elementi"

poi ho creato su view.py la seguente vista :

def ModelloPersonalComputer(request):
    pc = tbPersonalComputer.objects.all()
    accessori = tbElemento.objects.all()
    context = {"pc": pc, "accessori": accessori}
    return render(request, "lista.html", context)


Questa vista prende tutti i record dei Personal Computers e tutti i records accessori

Poi sulla pagina HTML:lista.html in allegato, eseguo un ciclo for su tutti i P.C. ed al suo interno un ciclo for per gli accessori e stampo tutti gli accessori con valore ID uguale a quello del P.C.
    {% for lstPC in pc %}
        <h4>Id : {{ lstPC.id }} - <strong>Personal Computer : {{ lstPC.Marca }} - {{ lstPC.Modello }} - € {{ lstPC.Prezzo }}</strong>
            {% for lstAccessori in accessori %}

                {% if lstPC.id == lstAccessori.get_id %}
                    <h5>Id : {{ lstAccessori.get_id }}<strong> Elemento: </strong>{{ lstAccessori.id }} - {{ lstAccessori.Elemento }} - € {{ lstAccessori.Prezzo }}</h5>
                {% endif %}

            {% endfor %}

            <hr>
        </h4>

    {% endfor %}


Il mio obiettivo, ma non so assolutamente come fare::question:
Sul ciclo for dei Personal computers, passare il suo ID ad  una vista che filtra gli accessori ( queryset ?) per valore ID del P.C. e visualizzare i soli records che soddisfano il criterio.
Così evito di ciclare sempre tutti i records degli accessori fino a quando non incontro quelli con stesso ID del P.C.

La pagina HTML è chiamata tramite il file urls.py.


from django.contrib import admin
from django.urls import path
from appPC.views import homepage, ModelloPersonalComputer

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', homepage, name='homepage'),
    path('lista/', ModelloPersonalComputer, name='lista')
]


Vi ringrazio per un aiuto, perché proprio non so come proseguire e spero proprio che qualcuno possa aiutarmi.
Riccardo.
« Ultima modifica: Maggio 01, 2020, 14:47 da Mancino Riccardo »