Tengo una pregunta sobre el modelado de objetos. Digamos que tenemos una relación de uno a muchos en la que una instancia del objeto A podría tener de 0 a muchos objetos B vinculados, mientras que el objeto B podría estar vinculado a uno y solo un objeto A (tenga en cuenta que el objeto B no se puede crear sin estar vinculado a un objeto B ). Hasta ahora, he agregado una clave externa al modelo del objeto B, al agregar ese objeto, debo seleccionar un Objeto A, hasta ahora todo bien. Mi pregunta ahora es ¿tengo que agregar también el objeto B al modelo del objeto A en el nivel de la base de datos? ¿O debería simplemente hacerlo en el nivel de API creando API anidadas? Entonces, obtener el objeto B sería de esta manera:
get : http://localhost/api/objectA/objectB
Espero haber sido claro al explicar mi pregunta, pero para resumir, no estoy seguro de si agregar una clave externa para representar a: 0.n---->1.1 es suficiente.
Hace mucho tiempo que no diseñaba una base de datos ¿estoy usando una metodología muy antigua?
Gracias
Mi pregunta ahora es ¿tengo que agregar también el objeto B al modelo del objeto A en el nivel de la base de datos?
no Si construyó una relación como ForeignKey
, puede dejar que Django consulte a la inversa. Así que si tienes dos modelos:
class A (models.Model): pass class B(models.Model): a = models.ForeignKey(A, on_delete=models.CASCADE)
Entonces puedes obtener todos los objetos B
que pertenecen a algún objeto A
somea
con:
somea .b_set.all()
Puede cambiar el nombre de la relación a la inversa configurando el parámetro related_name=…
[Django-doc] . Entonces puedes especificar la relación como:
class A(models.Model): pass class B(models.Model): a = models.ForeignKey( A, related_name='bs' , on_delete=models.CASCADE )
y luego consulta con:
somea .bs .all()