Лучший способ решить этот случай использования в django ORM

У меня есть пример, в котором есть таблица пользователей и таблица навыков .

1 пользователь может иметь несколько навыков, например writing , scalping , coding и т.д. до 50

Итак, какой лучший способ сохранить это? Из моих поисков я пришел к выводу, что поле ManyToMany является лучшим здесь, как это

class Skill(models.Model):
    name = models.CharField(max_length=50)

class User(models.Model):
    skills = models.ManyToManyField(Skill, blank=True, null=True)

но при получении данных я должен сделать обратные запросы, например, получить всех пользователей с определенным навыком writing. Я иду по правильному пути или нет. Пожалуйста, любая помощь будет высоко оценена

Я бы также использовал отношение ManyToMany, но я бы определил сквозную модель, так как это может дать большую гибкость отношениям. Вы можете прочитать об этом здесь: https://docs.djangoproject.com/en/4.0/topics/db/models/#extra-fields-on-many-to-many-relationships

Мой код, вероятно, выглядел бы так:

class Skill(models.Model):
    name = models.CharField(max_length=50)

class User(models.Model):
    skills = models.ManyToManyField(Skill, through="UserSkillRelation")

class UserSkillRelation(models.Model):
    skill = models.ForeignKey(Skill, on_delete=models.CASCADE)
    user = models.ForeignKey(Skill, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

Это также позволит вам впоследствии добавлять поля в отношения.

Вернуться на верх