Django 查找具有相同 JSONfield 值的自定义用户

Django Find custom user with the same value of JSONfield

我有一个 Django 应用程序,我在其中使用自定义用户模型。 Model 有一个 JSONfield,表示这个用户使用了哪些编程语言。 它看起来像这样:

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

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

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

抱歉,如果这个问题太愚蠢了。

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

通常是一个ManyToManyField [Django-doc] is used. This will work with a junction table [wiki],这使得它更易于访问并且可以保证参照完整性

因此,我们可以使用以下方式对其进行建模:

class ProgrammingLanguage(models.Model):
    name = models.CharField(unique=True)

class User(models.Model):
    languages = models.<b>ManyToManyField(</b>
        ProgrammingLanguage,
        related_name='users'
    <b>)</b>

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

User.objects.filter(
    <b>languages__users=<i>user</i></b>
)<b>.distinct()</b>

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