使用xlwt导出Django模型外键实际值而非ID的方法
解决Django xlwt导出外键字段实际值的问题
方法一:使用values_list关联字段查询
直接在values_list中通过**双下划线(__)**访问外键关联模型的目标字段,比如User的username、Brand的name(需根据实际模型字段调整)。
修改视图中rows的查询代码:
rows = Product.objects.filter(author=request.user).values_list( "id", "author__username", # 获取User模型的username字段值 "brand_id__name", # 获取Brand模型的name字段值(假设Brand有name字段) "name", "barcode", "unit" )
注意:如果你的Brand模型显示字段不是
name,或者User模型想显示其他字段(如author可能为null,导出时会显示None,可以后续处理为空字符串。
方法二:遍历对象实例手动获取值
这种方式更灵活,能处理空值等特殊情况,还可以直接使用模型__str__方法返回的内容:
修改视图中循环写入的部分:
# 替换原来的rows查询和循环 products = Product.objects.filter(author=request.user) for product in products: row_num += 1 # 逐个写入各列 ws.write(row_num, 0, str(product.id), font_style) # 处理author为空的情况 ws.write(row_num, 1, str(product.author) if product.author else "", font_style) # 使用Brand模型__str__返回的内容(如果Brand的__str__已定义为显示品牌名) ws.write(row_num, 2, str(product.brand_id), font_style) ws.write(row_num, 3, product.name, font_style) ws.write(row_num, 4, product.barcode, font_style) ws.write(row_num, 5, product.unit, font_style)
这种方式不需要关心关联模型的具体字段,只要模型的
__str__方法返回了你想要显示的内容,就可以直接用str(外键字段)获取实际值,同时能优雅处理author为null的场景。
内容的提问来源于stack exchange,提问作者Eric Maniel
相关产品推荐
相关产品推荐

