Двунаправленная передача данных от одного к другому django
Я хотел бы создать двунаправленные отношения "один ко многим" и "многие к одному" в django, например:
class User(models.Model):
device = dont_know_what_to_write()
class Device(models.Model):
user = models.ForeignKey(
User,
on_delete = models.CASCADE
)
Что мне делать?
В Django если вы определяете отношение от A к B, то Django автоматически добавит концептуальное отношение от B к A, которое вы можете запросить. Django, таким образом, уже добавил отношение в обратном направлении. Действительно, если вы реализуете модели с:
class User(models.Model):
# no device
pass
class Device(models.Model):
user = models.ForeignKey(
User,
on_delete = models.CASCADE
)
тогда вы можете получить доступ к набору устройств, связанных с пользователем с:
myuser.device_set.all()
это QuerySet
, который будет содержать все Device
, которые имеют myuser
в качестве user
.
Вы можете указать другое имя с помощью параметра related_name=…
[Django-doc]:
class Device(models.Model):
user = models.ForeignKey(
User,
on_delete = models.CASCADE,
related_name='devices'
)
тогда вы можете получить устройства с помощью:
myuser.devices.all()
Примечание: Обычно лучше использовать
settings.AUTH_USER_MODEL
[Django-doc] для ссылки на модель пользователя, чем использоватьUser
модель [Django-doc] напрямую. Для получения дополнительной информации вы можете посмотреть ссылка наUser
модель раздел документации .