我有一个用例,有一个用户表和一个技能表。
一个用户可以拥有多个技能,例如writing , scalping , coding
等,最多可达50
那么保存它的最好方法是什么?从我的搜索,我得出结论,许多领域是最好的这里像这样
class Skill(models.Model):
name = models.CharField(max_length=50)
class User(models.Model):
skills = models.ManyToManyField(Skill, blank=True, null=True)
但是在获得数据的同时,我必须反向查询,就像获得所有具有特定技能的用户一样,例如writing
。不管我走对了还是走错了。如有任何帮助,不胜感激
我也会使用多对多关系,但我将定义一个直通模型,因为这可以为关系提供更大的灵活性。你可以在这里阅读: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)
这也允许你在关系中添加字段。