2017-05-29 1 views
0

Je ne suis pas sûr de ce que je fais de mal mais en quelque sorte j'essaie de comparer deux valeurs et je suis sûr à 100% qu'elles correspondent mais d'une manière ou d'une autre le code n'exécuterait pas.comment comparer une chaîne unicode dans le champ et les choix du modèle? django

Disons que j'ai ce modèle (s'il vous plaît pardonner un fautes de frappe bits pour les modèles et les noms de champs)

class TestOne(models): 
    gender = models.Charfield(max_length=10, choices=GENDER_CHOICES) 

mes choix

GENDER_CHOICES = (("MALE", "MALE"), ("FEMALE", "FEMALE")) 

Je suis tellement sûr que mon champ gender est MALE pour la objet donc je fais cette déclaration comme vérifier que si c'est MALE faire quelque chose.

if a.gender is `MALE`: 
    # do something here 

mais il ne l'atteint jamais comme vrai. J'ai vérifié a.gender est un type unicode donc j'ai même fait str(a.gender) pour s'assurer que c'est aussi une chaîne mais toujours pas de chance.

Est-ce que je fais quelque chose de mal ici?

P.S. Je l'ai fait une impression avec a.gender et fait en sorte que la sortie est MALE

Merci à l'avance

Répondre

4

Ne pas faire:

if a.gender is 'MALE': 
# equivalent to: 
# id(a.gender) == id('MALE') 

faire à la place:

if a.gender == 'MALE': 

Le mot-clé 'is' vérifie l'identité de l'objet, c'est-à-dire si deux variables/objets référencent l'adresse mémoire identique. '==' vérifie l'égalité telle que définie dans la méthode de classe '__eq__', qui, dans votre cas, effectuera la comparaison de chaîne attendue.

Vérifiez Is there a difference between `==` and `is` in Python? pour une explication détaillée.

+0

Thx thx, puis-je dire est le même que triple = en JavaScript? – Dora