Djang多对多关系直通模型中的复杂搜索

2024-05-20 08:01:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我们正在使用Django Rest框架公开API来添加、编辑和检索关于用户及其技能的数据(具有级别)

我们有针对用户、技能和skillmatrix的模型(通过模型,我们需要为给定技能添加有关该用户技能水平的附加数据)

class Freelancer(models.Model):
    user = models.UUIDField (primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=30)
    contactNumber = models.BigIntegerField (default=None,blank=True, null=True)
    emailAddress = models.EmailField (max_length=50, blank=False, null=True)
    bachelorsDegree = models.CharField(max_length=50)
    mastersDegree = models.CharField(max_length=50)
    userCertificates =  models.TextField(max_length=200)    
    IsActive = models.BooleanField (default=True)
    UserPassword = models.CharField (max_length=50)
    DeacivateDate = models.DateTimeField (blank=True, null=True)
    Address = models.TextField(max_length=200)
    Pincode = models.IntegerField()

class Skill(models.Model):
    name = models.CharField(max_length=100)
    skilltype = models.CharField(max_length=100,null=True)
    userSkills = models.ManyToManyField(Freelancer,through='SkillMatrix')

class SkillMatrix(models.Model):
    user = models.ForeignKey(Freelancer,on_delete=models.CASCADE)
    skill = models.ForeignKey(Skill,on_delete=models.CASCADE)
    level = models.CharField(max_length=100,null=True)

现在我的挑战是:

我想找到最有效的方法来搜索具有特定技能的用户,并按最相关到最不相关的顺序返回。大约有10000个用户和300个技能

例如,如果所需的技能是[“python”,“html”,“css”,“postgres”],那么我应该能够返回一个UserID列表,以便

用户1>&燃气轮机;技能Python,html,css,postgres都是高级的

用户2>&燃气轮机;技能python html,css高级,postgres中级

用户3>&燃气轮机;技能python,html,css高级,无postgres技能

请帮帮我


Tags: 用户truedefaultmodelmodelshtml技能postgres