为了账号安全,请及时绑定邮箱和手机立即绑定

Django 模型定义中,如何在一个模型中获取该模型外键的字段值?

Django 模型定义中,如何在一个模型中获取该模型外键的字段值?

慕虎7371278 2019-05-21 11:36:34
一个招标文件,可以招标同类型物品的多种型号。所以型号部分需要外键关联至招标文件,并且根据招标文件的招标类型,来判断哪些型号可以被选择。fromdjango.dbimportmodelsclassBid_docu(models.Model):PRODUCT_TYPE=(('P','打印机'),('NB','笔记本电脑'),('C','台式电脑'),)bid_number=models.CharField('招标编号',max_length=13)title=models.CharField('标题',max_length=100)tenderee=models.CharField('招标人',max_length=8)product_type=models.CharField('设备类型',max_length=5,choices=PRODUCT_TYPE)classMeta:verbose_name='招标文件描述'verbose_name_plural='招标文件描述'def__unicode__(self):returnself.bid_numberclassBid_docu_product(models.Model):bid_docu=models.ForeignKey('Bid_docu',on_delete=models.CASCADE)type=bid_docu.product_type//这行代码总是报错。def__unicode__(self):returnself.type报错信息为:AttributeError:'ForeignKey'objecthasnoattribute'product_type'这是取值时的报错
查看完整描述

2 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

你的类命名也不规范,类命名不要有下划线,英文单词首字母要大写,Bid_docu_product建议改为BidDocuProduct
列表项目type=bid_docu.product_type这一句是查找bid_docu变量,找不到自然报错,按照语法可以改为BidDocuProduct.bid_docu.product_type,但实际能否运行还要具体看。而且你这样写没有任何意义,你已经定义了外键,你要获取获取关联表的字段,直接BidDocuProduct.objects.first().bid_docu.product_type
                            
查看完整回答
反对 回复 2019-05-21
?
慕森卡

TA贡献1806条经验 获得超8个赞

你这样设计数据库就数据冗余了。Bid_docu_product没必要保存type字段。Bid_docu_product对象如果要获得对应的type,使用Bid_docu_product对象.bid_docu.product_type即可。
                            
查看完整回答
反对 回复 2019-05-21
  • 2 回答
  • 0 关注
  • 2470 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信