【问题标题】:Django REST Framework : filtering with another tableDjango REST Framework:用另一个表过滤
【发布时间】:2017-02-27 14:15:36
【问题描述】:

我正在使用 Django REST 框架来实现关联调度系统,用户可以在其中订阅关联并接收其事件。每个协会可以有很多组(您在订阅该协会时选择自己的组),因此每个组的活动通常相同,但地点和日期不同。

模型如下所示:

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 过滤器的最佳方法是什么?

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    查看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)
    

    【讨论】:

    • 问题是变量“组”依赖于每个事件,因为一个事件与一个关联有关,而一个用户的组依赖于这个关联)。我通过将查询集转换为列表并使用 python 过滤函数找到了一种解决方案,但它看起来很难看(之后我无法将列表转换回查询集)
    猜你喜欢
    • 1970-01-01
    • 2018-08-07
    • 2018-10-03
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-21
    • 2021-03-09
    • 2023-03-17
    相关资源
    最近更新 更多