如何过滤通用外键?

2024-10-03 09:07:20 发布

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

我有这些型号:

class EventEntry(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')
    start_date =  models.DateTimeField(...)
    end_date = models.DateTimeField(...)
    field = models.CharField(max_length=64)

class ObjectPerm(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')
    public = models.BooleanField(...)
    users = models.ManyToManyField(User...)
    groups = models.ManyToManyField(Group...)

class Meeting(models.Model):
    scheduled_time = generic.GenericRelation(EventEntry)
    room = models.CharField(max_length=8)
    permissions = GenericRelation(ObjectPerm)

class Milestone(models.Model):
    due_date = generic.GenericRelation(EventEntry)
    title = models.CharField(max_length=128)
    permissions = GenericRelation(ObjectPerm)

EventEntry类用于将计划信息附加到任何对象,例如Meeting和Milestone。在

ObjectPerm类为任何需要保护的模型提供对象级权限。在

当我创建会议实例时,我为计划信息分配一个EventEntry实例。我还分配ObjectPerm实例来指定哪些用户可以访问会议对象。在

有更多的模型像会议和里程碑。在

现在,我要做的是检索EventEntry实例,但是根据ObjectPerm模型,只检索用户有权访问的相关对象的实例。例如public==True或用户在EventEntry字段“users”中的所有EventEntry实例。通过这种方式,我可以提取出所有要在日历中显示的事件,但是我不需要过滤会议、里程碑等,只是我无法使用Django的ORM在Python中编写这个过滤器。有什么建议,谢谢。谢谢


Tags: 对象实例iddatemodelobjectmodelstype