Лучший способ решить этот случай использования в 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)
Это также позволит вам впоследствии добавлять поля в отношения.