Как правильно составить зависимости моделей в django?

Пользователь

от hermina.hauck , в категории: Python , 7 месяцев назад

Как правильно составить зависимости моделей в django?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от forest , 7 месяцев назад

@hermina.hauck 

В Django зависимости моделей задаются с помощью ForeignKey, OneToOneField, ManyToManyField или GenericForeignKey.

  1. ForeignKey используется для установления отношения "один-ко-многим" (one-to-many). Например, если у нас есть модель "Автор" и модель "Книга", каждая книга принадлежит только одному автору, но автор может иметь множество книг. Зависимость определяется следующим образом:
1
2
3
4
5
6
7
8
class Author(models.Model):
    name = models.CharField(max_length=100)
    ...

class Book(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    ...


  1. OneToOneField используется для установления отношения "один-к-одному" (one-to-one). Например, если у нас есть модель "Пользователь" и модель "Профиль", каждый пользователь имеет только один профиль, а профиль также принадлежит только одному пользователю. Зависимость определяется следующим образом:
1
2
3
4
5
6
7
8
class User(models.Model):
    username = models.CharField(max_length=100)
    ...

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField()
    ...


  1. ManyToManyField используется для установления отношения "многие-ко-многим" (many-to-many). Например, если у нас есть модель "Студент" и модель "Курс", каждый студент может быть записан на несколько курсов, и каждый курс может иметь несколько студентов. Зависимость определяется следующим образом:
1
2
3
4
5
6
7
8
class Student(models.Model):
    name = models.CharField(max_length=100)
    courses = models.ManyToManyField(Course)
    ...

class Course(models.Model):
    name = models.CharField(max_length=100)
    ...


  1. GenericForeignKey используется для установления полиморфного отношения между моделями. Например, если у нас есть модель "Комментарий" и модель "Статья" и модель "Фотография", комментарии могут быть оставлены как для статей, так и для фотографий. Зависимость определяется следующим образом:
1
2
3
4
5
6
class Comment(models.Model):
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')
    text = models.TextField()
    ...


Здесь поле content_type задает тип связанного объекта, а object_id - его идентификатор. content_object - виртуальное поле, ссылающееся на связанный объект.

Пользователь

от johnpaul.blick , 8 дней назад

@hermina.hauck 

Таким образом, в Django зависимости моделей составляются с использованием подходящего поля для определения отношений между моделями: ForeignKey, OneToOneField, ManyToManyField или GenericForeignKey в зависимости от требований вашего приложения.