我试图构建一个推荐引擎,其中一个子任务是根据从可用标记列表中匹配的Venues
对Venues
进行排名。在
以下是我的模型:
class Venue(TimeStampedUUIDModel):
name = models.CharField(max_length=100, null=False, blank=False)
tags = ArrayField(
models.PositiveIntegerField(
verbose_name=_('tag'), choices=TAGS_CHOICES
), null=True, blank=True
)
我可以在过滤器中进行__contains
查找,以确定列表中某些标记已经存在的场所。但我的动机是想知道每个场馆有多少个标签是匹配的,这样我就可以给它们分配一些等级。例如,为每个匹配的标记指定10的等级。在
因此,如果一个场所匹配说是来自tag_list
的4个标签,那么它的排名应该是4*10=40。在
由于tags
是一个只能包含由正数定义的选项的ArrayField,__contains
查找在过滤器查询中起作用,但是我如何注释匹配的数量呢?在
最终结果可能是:
^{pr2}$如果需要更多信息,请告诉我。在
所以,我使用
Case
来解决这个问题,它使用When
条件映射到SQL案例。在这里
user_interested_in_tag_list
是用户感兴趣的标签列表,其逻辑是根据与此列表匹配的标签数量对每个场所进行排名。在user_interest_match_query
将是When
子句的列表,包括来自user_interest_match_query
的每个匹配标记的Value
,否则0
的{user_interested_tags_matches
是When
子句的所有结果的总和,它给出了user_interest_score
中注释的每个地点的实际分数。在我希望这对某人有帮助:)如果你需要更多的细节请告诉我。在
相关问题 更多 >
编程相关推荐