Django查询:匹配company_members与table_contacts数据并渲染至下拉框
Django 查询实现方案
1. 模型定义(参考)
先确保你的Django模型与数据库表对应:
from django.db import models class CompanyMember(models.Model): id = models.IntegerField(primary_key=True) company = models.CharField(max_length=100) # 其他关联字段根据实际需求补充 class TableContact(models.Model): id = models.IntegerField(primary_key=True) first_name = models.CharField(max_length=50) last_name = models.CharField(max_length=50) # 其他字段根据实际需求补充
2. 查询语句实现
要获取指定公司(比如Nike)的company_members中,id与table_contacts匹配的联系人记录,有两种高效实现方式:
方式一:分步筛选
先提取目标公司所有成员的id集合,再匹配联系人表:
def your_view(request): # 获取Nike公司所有成员的id列表 target_member_ids = CompanyMember.objects.filter(company="Nike").values_list('id', flat=True) # 筛选出id匹配的联系人记录 rendered_result = TableContact.objects.filter(id__in=target_member_ids) # 将数据传递到模板 return render(request, 'your_template.html', {'rendered_result': rendered_result})
方式二:子查询关联
利用Django的子查询能力,直接通过关联条件获取结果(性能更优):
def your_view(request): rendered_result = TableContact.objects.filter( id__in=CompanyMember.objects.filter(company="Nike").values('id') ) return render(request, 'your_template.html', {'rendered_result': rendered_result})
3. 模板代码修正
你提供的模板中名字拼接语法有误,修正后如下:
<select id="members_in_companies"> {% for option in rendered_result %} <option value="{{ option.id }}">{{ option.first_name }} {{ option.last_name }}</option> {% endfor %} </select>
按上述代码实现后,查询Nike公司时,下拉框会正确显示值为2、4,对应选项为Ellon Musk、Willy Wonka。
内容的提问来源于stack exchange,提问作者Nico44044
相关产品推荐
相关产品推荐

