2014-04-23 4 views
0

Disons que j'ai créé un modèle AnObject, et l'un des champs serait shape. Si j'ai 3 types de formes que le modèle pourrait être, cercle, carré, triangle. Quelle est la meilleure façon d'écrire le modèle? Supposons que ces formes ne sont pas des modèles (donc aucun champ de clé étrangère ne doit être utilisé ici), elles ne sont que des types de formes.Modèles Django/Python - options multifield

class AnObject(models.Model): 
    shape = ? 

Répondre

1

La méthode correcte consiste à utiliser l'argument choices pour un champ particulier. Documentation here

Ainsi:

class AnObject(models.Models) 
    SHAPE_CHOICES = (
     (CIRCLE, 'Circle'), 
     (TRIANGLE, 'Triangle'), 
     (SQUARE, 'Square'), 
    ) 
    shape = models.CharField(max_length=8, 
          choices=SHAPE_CHOICES, 
          default=CIRCLE) 
+0

Merci, je me suis dit que c'était quelque chose comme ça. Maintenant serait-ce la meilleure pratique dans le cas de seulement 2 choix? Ou devrais-je utiliser un booléen à la place et nommer un vrai et nommer l'autre faux? – ApathyBear

+1

C'est probablement une question de préférence personnelle, mais je pense que j'irais toujours avec un 'CharField' listant les options. Il devient plus facilement extensible à l'avenir si vous décidez d'ajouter une troisième option. Cela étant dit, vous pourriez utiliser un booléen si vous saviez que vous n'ajouteriez pas d'autres options plus tard et qu'il y a un défaut par défaut, au point que vous pourriez raisonnablement demander "Votre objet est-il un cercle?" avec un champ "Oui/Non". – Alex