如何在Django应用程序中实现用户匹配算法

2024-05-16 01:34:30 发布

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

我正在创建一个Django应用程序,它允许users to register作为“mentor”或“mentee”。每个用户都有一些信息存储在用户中,这些信息在所有帐户中都很常见,而导师/学员则有第二个表(一对一)导师档案/MenteeProfile,其中包含专业知识/兴趣领域。你知道吗

目标是创建一种机制,在运行匹配算法(如稳定关系)后,将导师分配给学员。我有工作注册/编辑功能,但我被困在如何开始实施匹配。你知道吗

有没有一种方法可以在Django管理面板中引入一个按钮,当单击该按钮时:

  • 从Django应用程序中提取必要的信息
  • 使导师/学员匹配并分配任务
  • 使用这些匹配项更新MentorProfile和MenteeProfile表

值得一提的是,我们有一个可以工作的python脚本,它从csv中提取必要的信息,csv可以进行导师/学员关系分配。我们只是不确定如何在我们的应用程序中实现这个逻辑。你知道吗

编辑: 只是对我的模型的总体看法。此外,User类具有默认的用户属性(username、firstname、lastname、email等)

这是我的博客/型号.py

class User(AbstractUser):
  is_mentor = models.BooleanField('Mentor', default=False)
  is_mentee = models.BooleanField('Mentee', default=False)


class MenteeProfile(models.Model):
CAREER_CHOICES = [
    ('Doctor', 'Doctor'),
    ('Teacher', 'Teacher'),
    ('Engineer', 'Engineer'),
    ('Scientist', 'Scientist'),
    ('Biologist', 'Biologist'),
    ('Business', 'Business')
]
user=models.OneToOneField(User, on_delete=models.CASCADE)
career_interest1 = models.CharField(max_length=30, default='Doctor', choices=CAREER_CHOICES)
career_interest2 = models.CharField(max_length=30, default='Doctor', choices=CAREER_CHOICES)
career_interest3 = models.CharField(max_length=30, default='Doctor', choices=CAREER_CHOICES)

class MentorProfile(models.Model):
user=models.OneToOneField(User, on_delete=models.CASCADE)
AREA_OF_EXPERTISE = [
    ('Doctor', 'Doctor'),
    ('Teacher', 'Teacher'),
    ('Engineer', 'Engineer'),
    ('Scientist', 'Scientist'),
    ('Biologist', 'Biologist'),
    ('Business', 'Business')
    ('--', '--')    ]
career_expertise1 = models.CharField(max_length=30, default='--', choices=AREA_OF_EXPERTISE)
career_expertise2 = models.CharField(max_length=30, default='--', choices=AREA_OF_EXPERTISE)
career_expertise3 = models.CharField(max_length=30, default='--', choices=AREA_OF_EXPERTISE)
career_expertise4 = models.CharField(max_length=30, default='--', choices=AREA_OF_EXPERTISE)
career_expertise5 = models.CharField(max_length=30, default='--', choices=AREA_OF_EXPERTISE)
career_expertise6 = models.CharField(max_length=30, default='--', choices=AREA_OF_EXPERTISE)
def __str__(self):
    return self.user.username

谢谢!你知道吗

感谢您的帮助!你知道吗


Tags: of信息defaultmodelsarealengthmaxchoices
1条回答
网友
1楼 · 发布于 2024-05-16 01:34:30

django docs

In admin.py file:

class MentorProfileAdmin(admin.ModelAdmin):
    #define your list display or fieldsets
     ....
     ....

     #now need to define urls for custom button in admin template file
     def get_urls(self):
        """
        generate urls for methods. and attach with admin url
        :param self:
        """
        urls = super().get_urls()
        my_urls = [
            url(r'^match-mentee/$', self.match_mentee),
        ]
        return my_urls + urls

        def match_mentee(self, request):
        """
        here you put the matching logic
        """
        ....
        ....
        self.message_user(request, "mentor has been assigned to mentee")
        return HttpResponseRedirect("../")

对于在管理模板中添加自定义按钮,我记得在django1.8中需要自定义按钮时有一些限制。所以只有有限的部分管理模板可以定制。我想让你参考official docs来探索定制。你知道吗

另外,将url放在button的href中,使button在模板中工作。你知道吗

相关问题 更多 >