Django:筛选含指定PK的行后,如何获取该PK对应的行数据
解决方案
首先,先优化你原有的查询逻辑——用icontains加;可能会出现误匹配(比如PK为11时,会错误匹配到包含1;的字段值),改用正则匹配能更精准地定位包含目标PK的行:
result_query_1 = models_contacts.objects.filter(company_members_id__regex=r'(^|;){}(;|$)'.format(pk))
至于获取result_query_2,完全不需要循环,直接根据目标PK查询对应行即可。如果需要先确认result_query_1有匹配结果再执行查询,可以这么写:
if result_query_1.exists(): try: result_query_2 = models_contacts.objects.get(id=pk) except models_contacts.DoesNotExist: # 这里可以根据业务需求处理PK对应行不存在的情况 result_query_2 = None else: result_query_2 = None
如果你的业务逻辑不需要依赖result_query_1的结果,只要目标PK对应的行存在就获取,直接跳过exists()判断,执行get()或filter()即可。
额外提一句:把关联ID用分号拼接存储在单个字段里属于反范式设计,长期来看建议改用Django的多对多关联表,ORM对多对多关系的支持会让后续的查询、维护都更便捷。
内容的提问来源于stack exchange,提问作者Nico44044
相关产品推荐
相关产品推荐

