Django : Отношения "один ко многим
У меня есть вопрос относительно моделирования объектов. Допустим, у нас есть отношения один ко многим, где объект A может иметь от 0 до многих связанных объектов B, в то время как объект B может быть связан с одним и только одним объектом A (обратите внимание, что объект B не может быть создан без связи с объектом B). Пока я добавил внешний ключ к модели объекта B, при добавлении этого объекта я должен выбрать объект A, пока все хорошо. Теперь у меня вопрос: должен ли я также добавить объект B в модель объекта A на уровне базы данных? Или я должен сделать это на уровне API, создав вложенные API? Таким образом, получение объекта B будет происходить следующим образом :
get : http://localhost/api/objectA/objectB
Надеюсь, я ясно объяснил свой вопрос, но, резюмируя, я не уверен, достаточно ли добавить внешний ключ для представления : 0.n---->1.1.
Я давно не проектировал базы данных, использую ли я очень старую методологию?
Спасибо
Мой вопрос заключается в том, должен ли я также добавить объект B к модели объекта A на уровне базы данных?
Нет. Если вы построили отношение типа ForeignKey
, вы можете позволить Django выполнять запрос в обратном порядке. Таким образом, если у вас есть две модели:
class A(models.Model):
pass
class B(models.Model):
a = models.ForeignKey(A, on_delete=models.CASCADE)
Тогда можно получить все B
объекты, которые принадлежат некоторому A
объекту somea
с помощью:
somea.b_set.all()
Вы можете переименовать отношение в обратном порядке, задав параметр related_name=…
[Django-doc]. Таким образом, вы можете указать отношение как:
class A(models.Model):
pass
class B(models.Model):
a = models.ForeignKey(
A,
related_name='bs',
on_delete=models.CASCADE
)
и затем запросить:
somea.bs.all()