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

一个招标文件,可以招标同类型物品的多种型号。所以型号部分需要外键关联至招标文件,并且根据招标文件的招标类型,来判断哪些型号可以被选择。
fromdjango.dbimportmodels
classBid_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_number
classBid_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'这是取值时的报错
慕虎7371278
浏览 2472回答 2
2回答

撒科打诨

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

慕森卡

你这样设计数据库就数据冗余了。Bid_docu_product没必要保存type字段。Bid_docu_product对象如果要获得对应的type,使用Bid_docu_product对象.bid_docu.product_type即可。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript