我有这些模型:

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实例来指定哪些用户可以访问会议对象。
有更多的模式,如会议和里程碑。
现在,我要做的是检索EventEntry实例,但仅检索那些用户有权访问的相关对象的实例,基于ObjectPerm模型。例如,public==True或用户在EventEntry字段“users”中的所有EventEntry实例。通过这种方式,我可以提取出所有事件以显示在日历中,但是我不需要过滤会议、里程碑等,除了我不知道如何使用Django的ORM用Python编写这个过滤器。任何建议都很感激。谢谢

最佳答案

你看过医生了吗?这些信息对我似乎很有帮助。这可能是有用的,因为我看它与我(小)的经验这可能需要打几个电话来完成工作。希望有用
https://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/#reverse-generic-relations

关于python - 如何过滤通用外键?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24366311/

10-11 18:05