微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决Django 查找具有相同 JSONfield 值的自定义用户

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

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

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

那么是否可以在 DB 中找到与当前用户具有 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] 将避免多次检索相同用户,因为他们有共同的语言。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。