10

Django beginner question. Tengo el siguiente modelo:elementos de muchos a muchos en una plantilla: compruebe si alguno no está vacío o ninguno

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) 

Hago una instancia del modelo disponible en una plantilla como 'leg'. En la plantilla, quiero ver si, para esa instancia, hay CUALQUIER controlador asociado. Intenté {% if leg.drivers%} pero eso siempre parece evaluar a True, independientemente de si hay controladores o no para el tramo.

¿Cómo verifico si realmente hay algún controlador? Perdón por la pregunta básica pero parece que no puedo resolverlo.

+0

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

+0

Creo que esto sería una relación inversa como driver.leg_set.all. Y no puedes utilizar llaves en las plantillas, al menos no con el motor de plantilla django, jinja lo aceptaría. – Jingo

+0

Paranthesis no se utilizan en plantillas, solo a la vista. Así sería: '{% if leg.drivers_set.all%}' –

Respuesta

11

{% if leg.drivers %} siempre será cierto, porque este será un administrador de muchos a muchos. Pruebe {% if leg.drivers.all %} para obtener todos los controladores asociados.

+1

Si no se usan objetos del controlador, será mucho más eficiente hacer 'leg.drivers.count'. – Ski

+0

Correcto, pero el contexto en el que OP usa la declaración no está claro ... – Jingo

1

La etiqueta de la plantilla for ... empty está hecha para esto. Simplemente ejecute loop.drivers.all y si desea mostrar algún mensaje si no hay controladores, puede hacerlo en la cláusula vacía.

Cuestiones relacionadas