J'essaie de créer 3 modèles; Person
, Address
et Anniversy
. Le plan est d'avoir une adresse et un anniversaire pour chaque personne. Mais chaque adresse et chaque anniversaire peuvent avoir plusieurs personnes.
Jusqu'à présent, j'ai ce qui suit, mais je pense que les relations OneToMany(foreign key)
peuvent être à l'envers. c'est-à-dire que chaque adresse peut avoir une personne mais chaque personne peut avoir plusieurs adresses.
from Django.db import models
class Person(models.Model):
name = models.CharField(max_length=50)
birthday = models.DateField()
def __unicode__(self):
return u'%s' % (self.name)
class Address(models.Model):
person = models.ForeignKey(Person)
address = models.CharField(max_length=150)
def __unicode__(self):
return u'%s' % (self.address)
class Anniversy(models.Model):
person = models.ForeignKey(Person)
anniversy = models.DateField()
def __unicode__(self):
return u'%s' % (self.anniversy)
Vous créez les relations dans l'autre sens; ajoutez des clés étrangères au type Person
pour créer une relation plusieurs-à-un:
class Person(models.Model):
name = models.CharField(max_length=50)
birthday = models.DateField()
anniversary = models.ForeignKey(
Anniversary, on_delete=models.CASCADE)
address = models.ForeignKey(
Address, on_delete=models.CASCADE)
class Address(models.Model):
line1 = models.CharField(max_length=150)
line2 = models.CharField(max_length=150)
postalcode = models.CharField(max_length=10)
city = models.CharField(max_length=150)
country = models.CharField(max_length=150)
class Anniversary(models.Model):
date = models.DateField()
Toute personne ne peut être connectée qu'à une adresse et un anniversaire, mais les adresses et les anniversaires peuvent être référencés à partir de plusieurs entrées Person
.
Les objets Anniversary
et Address
recevront également une relation inverse et arrière; par défaut, il sera appelé person_set
mais vous pouvez configurer un nom différent si nécessaire. Voir Suite relations "en arrière" dans la documentation des requêtes.