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

一个招标文件,可以招标同类型物品的多种型号。所以型号部分需要外键关联至招标文件,并且根据招标文件的招标类型,来判断哪些型号可以被选择。

from django.db import models

class Bid_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)

class Meta:
    verbose_name = '招标文件描述'
    verbose_name_plural = '招标文件描述'


def __unicode__(self):
    return self.bid_number

class Bid_docu_product(models.Model):

bid_docu = models.ForeignKey('Bid_docu', on_delete=models.CASCADE)
type = bid_docu.product_type    //这行代码总是报错。

def __unicode__(self):
    return self.type
    

报错信息为:AttributeError: 'ForeignKey' object has no attribute 'product_type'这是取值时的报错

阅读 3.7k
2 个回答
  1. 你的类命名也不规范,类命名不要有下划线,英文单词首字母要大写,Bid_docu_product 建议改为 BidDocuProduct
  2. 列表项目 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即可。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题