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