django 如何联接两个表,并从左表中获取所有行,而在右表中仅获取匹配行

t9eec4r0  于 2022-11-26  发布在  Go
关注(0)|答案(1)|浏览(141)

表一

表二

Table2.plan_selected显示了用户选择的计划。
例如:表2中user_id=4的用户从表1中选择id = 2的计划。
我想获取Table 1中的所有行,而只获取Table 2中与特定user_id匹配的行。
预期的结果是这样的。
我想提取Table 1的所有行,而只提取Table 2中特定user_id(比如4)的选定计划。
预期的结果将是这样的:
计划ID名称 * 计划类型详细信息请求每月 * 价格 * 已删除计划 * 已选择
1每月执行一次{1000可能需要} 1000 50 0空
2基本每月{500可能需要} 1000 25 0 2
3每月免费{10可能需要} 1000 0 0空
4每年执行{1000可能要求} 1000 500 0空
5基本年度{500可能要求} 1000 250 0空
6每年免费{10可能需要} 1000 0 0 NULL
我所尝试做的是使用一个简单的左连接。
select plans.id, name, plan_details, plan_type, request_per_month, price,is_deleted, plan_selected from SubscriptionsPlans as plans left join SubscriptionsOrder as orders on plans.id=orders.plan_selected where orders.user_id = 4
这是我的两个模型。ORM查询集或SQL查询将有所帮助

class SubscriptionsPlans(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=255)
    plan_type = models.CharField(max_length=255)
    plan_details = models.TextField(max_length=1000)
    request_per_month = models.IntegerField()
    price = models.FloatField()
    is_deleted = models.BooleanField(default=False)

class SubscriptionsOrder(models.Model):
    id = models.IntegerField(primary_key=True)
    user_id = models.ForeignKey(
        AppUser,
        null=True,
        on_delete=models.SET_NULL
    )
    plan_selected = models.ForeignKey(SubscriptionsPlans, null=True, on_delete=models.SET_NULL)
    billing_info = models.IntegerField()
fkaflof6

fkaflof61#

您可以使用以下方式进行查询:

SubscriptionsPlans.objects.filter(subscriptionsorder__user_id=4)

这将列出所有SubscriptionPlans,其中存在SubscriptionOrder4user_id

相关问题