如何在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
相关产品推荐
相关产品推荐

