10

Domanda per principianti Django. Ho il seguente modello:elementi molti-a-molti in un modello: controlla se nessuno è vuoto o nessuno

class Leg(models.Model): 
    startpoint = models.CharField(max_length=50, help_text="examples: 'Smith Elementary' or 'riders' houses'; less than 50 characters.") 
    endpoint = models.CharField(max_length=50, help_text="examples: 'Smith Elementary' or 'riders' houses'; less than 50 characters.") 
    riders = models.ManyToManyField(Rider, blank=True) 
    drivers = models.ManyToManyField(Driver, blank=True) 

Rendo un'istanza del modello disponibile in un modello come "gamba". Nel modello, voglio vedere se, per quell'istanza, ci sono QUALSIASI driver associati. Ho provato {% se leg.drivers%} ma sembra sempre valutare True, indipendentemente dal fatto che ci siano driver o meno per la gamba.

Come faccio a verificare se ci sono effettivamente dei driver? Ci scusiamo per la domanda di base, ma non riesco a capirlo.

+0

Prova '{% if leg.drivers_set.all()%}' –

+0

Penso che questo sarebbe per una relazione a ritroso come driver.leg_set.all. E non puoi usare le parentesi nei modelli, almeno non con il motore di template django, jinja lo accetterebbe. – Jingo

+0

Le parentesi non vengono utilizzate nei modelli, solo in vista. Così sarebbe: '{% if leg.drivers_set.all%}' –

risposta

11

{% if leg.drivers %} sarà sempre vero, perché questo sarà un manager da molti a molti. Prova {% if leg.drivers.all %} per ottenere tutti i driver associati.

+1

Se gli oggetti del driver non vengono utilizzati sarà molto più efficiente fare 'leg.drivers.count'. – Ski

+0

Giusto, ma il contesto in cui l'OP utilizza l'istruzione non è chiaro ... – Jingo

1

Il tag modello for ... empty è creato per questo. Semplicemente loop leg.drivers.all e se vuoi visualizzare qualche messaggio se non ci sono driver, allora puoi farlo nella clausola vuota.

Problemi correlati