Estoy definiendo mis modelos Django en este momento y me di cuenta de que no había un OneToManyField
en los tipos de campo modelo. Estoy seguro de que hay una manera de hacerlo, así que no estoy seguro de lo que me estoy perdiendo. Esencialmente tener algo como esto:Cómo expresar una relación Uno a Muchos en Django
class Dude(models.Model):
numbers = models.OneToManyField('PhoneNumber')
class PhoneNumber(models.Model):
number = models.CharField()
En este caso, cada Dude
puede tener múltiples PhoneNumber
s, pero la relación debería ser unidireccional, en la que no necesito saber desde el cual PhoneNumber
Dude
posee, per se, como que podría tener muchos objetos diferentes que poseen PhoneNumber
casos, como por ejemplo un Business
:
class Business(models.Model):
numbers = models.OneToManyField('PhoneNumber')
¿Qué iba a reemplazar OneToManyField
(que no existe) con en el modelo para representar a este k ind de la relación? Vengo de Hibernate/JPA, donde se declara una relación uno-a-muchos era tan fácil como:
@OneToMany
private List<PhoneNumber> phoneNumbers;
¿Cómo puedo expresar esto en Django?
¿Podría darme un ejemplo dado el problema anterior? Probablemente me lo estoy perdiendo por completo, pero he estado leyendo la documentación de Django desde hace un tiempo y aún no estoy claro cómo crear este tipo de relación. –
podría querer hacer que las dos ForeignKeys no sean necesarias (en blanco = True, null = True) o agregar algún tipo de validación personalizada para asegurarse de que haya al menos una u otra. ¿Qué pasa con el caso de una empresa que tiene un número genérico? o un tipo desempleado? –
@j_syk buen punto acerca de la validación personalizada. pero parece algo estrafalario incluir tanto una clave foránea como una clave externa para las empresas, y luego hacer una validación personalizada (externa a la definición del modelo). parece que tiene que haber una manera más limpia, pero tampoco puedo resolverlo. – andy