Django REST Framework:使用另一个表进行过滤

时间:2016-10-18 10:38:25

标签: django filter django-rest-framework django-filter

我正在使用Django REST Framework来实现关联计划系统,用户可以订阅关联并接收其事件。每个协会可以有多个群组(您在订阅协会时选择自己的群组),以便每个群组的事件通常相同,但具有不同的地点和日期。

模型如下所示:

class Association(models.Model):
    name = models.CharField(max_length=40, blank=False, unique=True)
    description = models.CharField(max_length=500, blank=False)

class AssocMember(models.Model):
    class Meta:
        unique_together = (("user", "assoc"),)

    user = models.ForeignKey('user.User')
    assoc = models.ForeignKey('associations.Association')
    is_admin = models.BooleanField(default=False)
    group = models.SmallIntegerField(default=-1)

class Event(models.Model):
    name = models.CharField(max_length=40, blank=False)
    date = models.DateTimeField(blank=False)
    assoc = models.ForeignKey('associations.Association')
    group = models.IntegerField(blank=True, default=-1)

我需要在我的API中实现get_queryset(),它返回与其组对应的已连接用户的所有事件。但为此,我必须在过滤期间为每个事件访问AssocMember,并创建自定义条件(如Python中的普通.filter()

使用Django REST过滤器的最佳方法是什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

查看ModelViewSet。您可以根据get_queryset

覆盖request.user方法进行过滤
class EventViewSet(viewsets.ModelViewSet):
    def get_queryset(self):
        group = self.request.user.group  # Your models might need adjusting to do this
        return Event.objects.filter(group__in=group)