2009-06-18 12 views
0

Comment savoir si une valeur est la valeur par défaut de la propriété d'un modèle.Django: Savoir si la propriété est la valeur par défaut

Par exemple

class Alias(models.Model) : 
    image = models.ImageField(upload_to='alias', default='/media/alias-default.png') 

a = Alias.get("123") 
# this doesn't work 
if a.image == a.image.default : 
    pass 
# nor this 
if a.image == Alias.image.default : 
    pass 

J'ai essayé de creuser dans la documentation, mais ne voit rien.

Répondre

2

Le paramètre default dans Django n'est pas identique à SQL par défaut - il est simplement là pour permettre à l'administrateur de remplir automatiquement le champ de formulaire lors de la création d'un nouvel objet.

Si vous voulez comparer quelque chose à une valeur définie comme default, vous devez la définir ailleurs (par exemple, settings.py). Comme:

class MyModel(models.Model): 
    ... 
    my_field = models.IntegerField(default=settings.INT_DEFAULT) 

La valeur default est stockée dans MyModel._meta._fields()[field_creation_index].default mais sachez que cela est en train de creuser dans les internes.

+0

Est-ce que _meta est pris en charge ou pourrait changer à l'avenir? –

+0

Tout ce qui a un nom commençant par underscore doit être considéré comme interne. Quoi qu'il en soit, il n'a pas changé entre 1.0 et 1.1. – zgoda

+0

Si vous voulez utiliser l'attribut interne (_meta est assez stable pour l'API interne), il est plus facile de lire MyModel._meta.get_field ('field_name') .par défaut que d'y accéder en créant un index. –

3

Vous ne pouvez pas l'obtenir de la propriété elle-même, vous devez passer par les options du modèle sous model._meta.

a._meta.get_field_by_name('image')[0].get_default() 
+0

Est-ce supporté ou pourrait changer à l'avenir? –

Questions connexes