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] 将避免多次检索 相同的 用户,因为他们有共同的语言。
我有一个 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] 将避免多次检索 相同的 用户,因为他们有共同的语言。