Pregunta rápida. ¿Alguien tiene alguna idea de cómo escribir condicionales en modelos django?

Por ejemplo, tengo este código aquí:

class Trip(models.Model):

    tripName = models.CharField(max_length=64)
    tripLogo = models.ImageField(default='default_trip.jpg', upload_to='trip_pics')

Entonces, aquí el valor predeterminado es 'default_trip.jpg', pero me gustaría escribir un condicional que if tripName == "russian" que default=russia.jpg. Tal vez no cambie el valor predeterminado, pero se iniciará otra imagen.

0
Hiddenguy 10 may. 2019 a las 01:21

3 respuestas

La mejor respuesta

Entonces, esta parte del código me ayudó a resolver mi problema.

def save(self, *args, **kwargs):
    tripName = getattr(self, 'tripName')
    if tripName in tripImages:
        self.tripLogo = "{}.png".format(tripName.lower())
    else:
        self.tripLogo = "default_trip.png"
0
Hiddenguy 12 may. 2019 a las 15:50

Esto no es algo que se pueda hacer en el nivel del modelo, debe hacerse en el controlador (de lo contrario, esto rompería el patrón MVC).

Tenga en cuenta que el contenedor ORM de Django debe convertir su clase de modelo en una tabla utilizable en cualquier motor de base de datos subyacente. Este tipo de "defecto condicional" no es parte de ningún motor de base de datos que yo sepa.

1
Colin Basnett 9 may. 2019 a las 22:28

El argumento predeterminado puede ser un calable.

def contact_default():
    return {"email": "to1@example.com"}

contact_info = JSONField("ContactInfo", default=contact_default)

Lea esto

0
katoozi 10 may. 2019 a las 12:18