4

我有这些模型:

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 类用于将日程安排信息附加到任何对象,例如会议和里程碑。

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

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

还有更多模型,例如 Meeting 和 Milestone。

现在,我要做的是检索 EventEntry 实例,但仅检索用户有权访问的相关对象的实例,基于 ObjectPerm 模型。

例如,public == True 或用户位于 EventEntry 字段“用户”中的所有 EventEntry 实例。这样我可以提取所有事件以显示在日历中,但我不需要过滤会议、里程碑等。除了我不知道如何使用 Django 的 ORM 在 Python 中编写这个过滤器。

4

1 回答 1

0

你看过文档吗?这些信息对我来说似乎很有帮助。这可能很有用,因为我以我的(很少)经验看到它的方式可能需要几个电话才能完成工作。希望它有效

https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#reverse-generic-relations

于 2014-06-24T18:00:01.760 回答