關(guān)系模型如下:
class asset(models.Model):
asset_status = models.IntegerField(verbose_name=u'資產(chǎn)狀態(tài)', choices=ASSET_STATUS, default=0)
name = models.CharField(verbose_name=u'資產(chǎn)名稱', max_length=32)
def __str__(self):
return self.name
class People(models.Model):
number = models.CharField(u'員工編號(hào)', max_length=30, blank=True, null=True)
name = models.CharField(u'員工', max_length=30)
max_borrowing = models.IntegerField(default=2)
gender = models.CharField(max_length=6, choices=(('male', '男'), ('female', '女')), default='female',
null=True, blank=True, verbose_name='性別')
address = models.CharField(max_length=100, null=True, blank=True, default='', verbose_name='地址')
mobile = models.CharField(max_length=11, null=True, blank=True, verbose_name='手機(jī)號(hào)')
email = models.EmailField(max_length=50, null=True, blank=True, verbose_name='郵箱')
def __str__(self):
return str(self.name)
class Meta:
verbose_name = u'姓名'
verbose_name_plural = u'員工'
class Collar(models.Model):
people = models.ForeignKey(People, blank=True, null=True, verbose_name=u"領(lǐng)用人")
asset = models.ForeignKey(Asset, verbose_name=u'資產(chǎn)', null=True)
collar_time = models.DateField(verbose_name=u"領(lǐng)用時(shí)間", )
status = models.IntegerField(choices=ASSET_STATUS, verbose_name=u'status', default=1)
description = models.TextField(verbose_name=u"描述", blank=True)
def __str__(self):
return str(self.people)
class Meta:
verbose_name = u'資產(chǎn)領(lǐng)用'
verbose_name_plural = u'資產(chǎn)領(lǐng)用'
上面的數(shù)據(jù)關(guān)系很明晰,Collar中有people和Asset的外鍵,那么我想在asset的詳細(xì)頁(yè)里面看到people是哪個(gè)該怎么操作呢?
我通過(guò)下面獲取到了所有的信息,需要怎么樣的過(guò)濾呢?
collar = Collar.objects.all()
for e in collar:
p = e.people
a = e.asset
這樣就把所有的信息都給整出來(lái)了,有沒(méi)有辦法做到精確到哪個(gè)人領(lǐng)到的資產(chǎn),就顯示出哪個(gè)people到信息呢?
你的people,asset在Collar的關(guān)系是多對(duì)多,asset與collar的關(guān)系是一對(duì)多
通過(guò)asset查向collar
collar_set = asset.collar_set.all()// 有多個(gè)
再向collar_set查向people
for collar in collar_set:
collar.people
最后,建議在ForeignKey上添加relate_name來(lái)幫助反向查詢,要不就只能用默認(rèn)的查詢名字
django文檔
哈哈~我這算是跟蹤了。表格設(shè)計(jì)是挺清晰。
上面的for循環(huán)只會(huì)得到最后一個(gè)循環(huán)的結(jié)果,因此,你并不是獲得了所有的 people 或者 asset。
如果一定要用for的方式做。那么你在for循環(huán)外層要加一個(gè)列表或者字典來(lái)存放你for循環(huán)得到的每一條數(shù)據(jù),之后在模板中又一次for循環(huán)得到每個(gè)子數(shù)據(jù)。(有點(diǎn)多余哈)
所以,建議你看看Django中數(shù)據(jù)庫(kù)操作反向查詢那塊。下面的內(nèi)容也許就是實(shí)現(xiàn)你想法的方法。
asset_item = asset.objects.get(pk=1)
collar_asset = asset_item.asset_set.all() #查詢集,這個(gè)時(shí)候不能直接get,因?yàn)槭遣樵兗?br>first = collar_asset.first() #得到你第一條對(duì)應(yīng)上的領(lǐng)用數(shù)據(jù)
first.people #這個(gè)時(shí)候你才能得到你的領(lǐng)用人信息。
那么問(wèn)題來(lái)了,看你的設(shè)計(jì)本來(lái)應(yīng)該是一個(gè)領(lǐng)用記錄就對(duì)應(yīng)一個(gè)資產(chǎn)的,再?gòu)漠?dāng)前某一資產(chǎn)上找到對(duì)應(yīng)的領(lǐng)用人信息。
但實(shí)際上:一個(gè)資產(chǎn)是有可能被重復(fù)領(lǐng)用的(不同時(shí)間)。所以,上面三個(gè)表格的設(shè)計(jì)可能并不是你想要的。
仔細(xì)看了一下上面三張表格的設(shè)計(jì),模型 Collar 中的status和模型asset中的asset_status似乎有點(diǎn)沖突。
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。