如何创建自定义管理器以返回其他管理器的并集

时间:2013-09-16 01:44:54

标签: django

我有以下django模型:

class Video(models.Model):

    # ... snip ...

    # Entities detected using face tracking                                                                                                                                                                  
    faces = models.ManyToManyField(Entity, related_name="facevids", blank=True)
    # Entities detected using speaker diarisation                                                                                                                                                            
    speakers = models.ManyToManyField(Entity, related_name="speakervids", blank=True)
    # Entities detected by extracting names from metadata and ocr                                                                                                                                            
    names = models.ManyToManyField(Entity, related_name="namevids", blank=True)
    # Entities detected using logo detection                                                                                                                                                                 
    logos = models.ManyToManyField(Entity, related_name="logovids", blank=True)

class Entity(models.Model):

    entity_id = models.CharField(primary_key = True, max_length = 100)

我想将自定义管理器添加到Entity,以便我可以使用与allvidsfacevids相同的方式访问speakervids ManyToMany自定义字段。

到目前为止,我已经研究了如何访问和联合使用类似

的查询集
@property
def allvids(self):
    return (self.facevids.get_query_set() | self.speakervids.get_query_set() |
            self.namevids.get_query_set() | self.logovids.get_query_set()).distinct()

但是这会返回一个queryset对象而不是Manager,这意味着allvids的访问权限与facevidsspeakervids等不一样。我更喜欢结束用户无需了解实施和访问allvids与其他Manager字段完全相同。

0 个答案:

没有答案