Solución:
Para manejar las relaciones de uno a varios en Django, debe usar ForeignKey
.
La documentación de ForeignKey es muy completa y debería responder todas las preguntas que tenga:
https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey
La estructura actual en su ejemplo permite que cada tipo tenga un número y que cada número pertenezca a varios tipos (lo mismo con Business).
Si desea la relación inversa, deberá agregar dos campos ForeignKey a su modelo PhoneNumber, uno para Dude y otro para Business. Esto permitiría que cada número pertenezca a un tipo o una empresa, y que los tipos y las empresas puedan poseer varios números. Creo que esto podría ser lo que buscas.
class Business(models.Model):
...
class Dude(models.Model):
...
class PhoneNumber(models.Model):
dude = models.ForeignKey(Dude)
business = models.ForeignKey(Business)
En Django, una relación de uno a varios se llama ForeignKey. Sin embargo, solo funciona en una dirección, así que en lugar de tener un number
atributo de clase Dude
necesitará
class Dude(models.Model):
...
class PhoneNumber(models.Model):
dude = models.ForeignKey(Dude)
Muchos modelos pueden tener un ForeignKey
a otro modelo, por lo que sería válido tener un segundo atributo de PhoneNumber
tal que
class Business(models.Model):
...
class Dude(models.Model):
...
class PhoneNumber(models.Model):
dude = models.ForeignKey(Dude)
business = models.ForeignKey(Business)
Puede acceder al PhoneNumber
s para un Dude
objeto d
con d.phonenumber_set.objects.all()
, y luego hacer lo mismo para un Business
objeto.
Para ser más claros, no hay OneToMany en Django, solo ManyToOne, que es Foreignkey descrito anteriormente. Puede describir la relación OneToMany usando Foreignkey, pero eso es muy inexpresivo.
Un buen artículo al respecto: https://amir.rachum.com/blog/2013/06/15/a-case-for-a-onetomany-relationship-in-django/