2010-11-30 7 views
0

Dire que j'ai le modèle suivant:Django Database Design - Null pour

class Person(models.Model): 
    street_address = models.CharField(max_length=50, blank=True) 
    suburb = models.CharField(max_length=30) 
    postcode = models.IntegerField() 
    state = models.CharField(max_length=3) 
    email = models.EmailField() 
    mobile_phone_number = models.IntegerField(max_length=12) 
    home_phone_number = models.IntegerField(max_length=10, null=True, blank=True) 
    work_phone_number = models.IntegerField(max_length=8, null=True, blank=True) 
    spouse = models.ForeignKey('self', null=True, blank=True) 
    children = models.ManyToManyField('self', null=True, blank=True) 

Plusieurs des champs ci-dessus sont censés être en option (par exemple adresse_rue, home_phone_number et work_phone_number, ainsi que le conjoint/enfants). Dans Django, pour les champs CharField, vous pouvez définir "blank = True" et si l'utilisateur laisse le champ de formulaire vide, Django va stocker une chaîne vide. C'est très bien. Cependant, pour les champs entiers comme home_phone_number et work_phone_number, cela ne fonctionne pas - j'ai dû utiliser "null = True" pour traiter le cas des personnes ne soumettant pas dans ces détails. Y a-t-il un meilleur moyen, modèle/base de données de conception sage de faire face à cela, et ne pas avoir des valeurs NULL? Enfin, pour les clés étrangères facultatives comme le conjoint/les enfants (une personne peut ne pas être mariée ou ne pas avoir d'enfants), comment devriez-vous gérer ces facteurs?

Cheers, Victor

Répondre

0

(A) Les numéros de téléphone ne sont pas réellement des entiers, ils sont des chaînes de caractères, et doivent être stockés dans la base de données en tant que telle. (B) Null est fondamentalement la bonne façon d'utiliser les clés étrangères facultatives.

+0

Adam V: Merci pour votre réponse rapide =). Oui, après avoir lu plus, vous avez absolument raison, les numéros de téléphone devraient être des chaînes de caractères, ce ne serait pas comme si je ferais des opérations mathématiques sur eux. – victorhooi

+0

Adam V: Pour les clés étrangères facultatives - il n'y a vraiment pas d'autre moyen d'y parvenir, sans utiliser NULL? Juste curieux. – victorhooi