【问题标题】:Django Find custom user with the same value of JSONfieldDjango查找具有相同JSONfield值的自定义用户
【发布时间】:2026-01-26 15:40:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 我真的建议不要使用JsonField 来引用其他模型。通常使用ManyToManyField。这将在数​​据库上以一种更方便过滤、聚合等的方式表示,因为关系数据库(类似 SQL)通常不适用于 JSON 等动态和递归数据。

标签: python django database django-models django-custom-user


【解决方案1】:

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

通常使用ManyToManyField [Django-doc]。这将与junction table [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] 将避免多次检索相同用户,因为他们有共同的语言。

【讨论】:

    最近更新 更多