You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django查询用户列表时关联KYC状态(一对一外键)

获取用户列表并关联KYC验证状态

需求

获取所有用户列表,通过一对一外键关联KYC模型,在查询结果中包含用户是否完成KYC验证的状态。

原查询代码

user_list = user.objects.filter().values('username', 'user id', 'email', 'phone')

查询结果示例:

[
    {'username': 'muthu12', 'user id': 25, 'email': 'muthu12@gmail.com', 'phone': '9047885819'},
    {'username': 'muthu123', 'user id': 26, 'email': 'muthu123@gmail.com', 'phone': '9047885819'}
]

期望查询结果格式

(KYC与用户为一对一外键关联)

[
    {'username': 'muthu12', 'user id': 25, 'email': 'muthu12@gmail.com', 'phone': '9047885819', 'KYC': True},
    {'username': 'muthu123', 'user id': 26, 'email': 'muthu123@gmail.com', 'phone': '9047885819', 'KYC': False}
]

KYC模型结构

class KYC(models.Model):
    kyc_id = models.AutoField(primary_key=True)
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='kyc')
    pan_card = models.CharField(max_length=20)
    dob = models.CharField(max_length=20)
    kyc_status = models.CharField(max_length=20)  # 示例值:"completed"、"pending"

解决方案

方案1:仅判断是否存在KYC记录

如果只需判断用户是否提交过KYC(即是否有对应的KYC记录),可使用Exists子查询:

from django.db.models import Exists, OuterRef

user_list = user.objects.annotate(
    KYC=Exists(KYC.objects.filter(user_id=OuterRef('id')))
).values('username', 'user id', 'email', 'phone', 'KYC')

方案2:结合KYC验证状态字段

如果需要根据KYC模型的kyc_status字段判断是否完成验证(比如kyc_status为"completed"才算完成),可使用Case和When:

from django.db.models import Case, When, BooleanField

user_list = user.objects.annotate(
    KYC=Case(
        When(kyc__kyc_status='completed', then=True),
        default=False,
        output_field=BooleanField()
    )
).values('username', 'user id', 'email', 'phone', 'KYC')

注意:代码中的user需替换为你的实际用户模型名称;user id字段如果是用户模型主键,通常为id或user_id,请根据实际模型调整字段名。

内容的提问来源于stack exchange,提问作者Muthumani18

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:03:14