【问题标题】:How to transform QuerySet to another type?如何将 QuerySet 转换为另一种类型?
【发布时间】:2021-05-13 18:22:37
【问题描述】:

假设你有这些模型:

class NetworkMember(models.Model):
    network = models.ForeignKey(Network, related_name='members', on_delete=models.CASCADE, db_column='network_id_id')
    user = models.ForeignKey(User, on_delete=models.CASCADE, db_column='user_id_id')

class Network(models.Model):
    created_at = models.DateTimeField(auto_now_add=True, db_index=True)

你已经过滤了NetworkMember:

    user_networks = NetworkMember.objects.filter(user=self.user)

现在user_networksNetworkMember 的QuerySet,如何将其转换为Network 的QuerySet?

执行.values('network').values_list('network') 不会将QuerySet 的类型更改为Network

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    你可以过滤:

    Network.objects.filter(<b>members__user=self.user</b>)

    可以使用双下划线 (__) 来“透视”关系。由于您指定了related_name='members',我们反向访问关系。

    如果有多个NetworkMembers 与同一个用户到同一个Network,那么Network 将被返回多次,因为有这样的NetworkMember,你可以使用.distinct() [Django-doc] 来防止:

    Network.objects.filter(members__user=self.user)<b>.distinct()</b>

    【讨论】:

      猜你喜欢
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多