Django找到与json字段值相同的自定义用户



我有一个django应用程序,在那里我使用自定义用户模型。模型有一个json字段,它表示该用户使用哪种编程语言。它看起来像这样:

{"langs": [1, 2, 3, 4]}

这些数字是语言数据库模型的ID。

那么是否有可能在DB中找到与当前用户具有一种或多种相同语言的用户?我想获得一个数组,其中包含按匹配语言数量排序的自定义用户对象。

对不起,如果这个问题太愚蠢。

我建议不要使用JsonField来参考其他模型。SQL数据库通常不适用于递归动态数据,因为关系数据库在概念上不是这样设计的。

典型aManyToManyField使用[Django-doc]。这将与连接表[wiki]一起工作,这使得它更容易访问,并且可以保证引用完整性

我们可以用

class ProgrammingLanguage(models.Model):
name = models.CharField(unique=True)
class User(models.Model):
languages = models.ManyToManyField(
ProgrammingLanguage,
related_name='users'
)

如果我们有一个User对象user,我们可以找到至少有一种语言与之相同的用户:

User.objects.filter(
languages__users=user
).distinct()

.distinct()call [Django-doc]将避免多次检索相同的用户,因为他们有共同的语言。

最新更新