Django开发者群  - 讨论区

标题:關於django與mysql問題

2011年05月10日 星期二 11:48

大家好 
有兩個問題請教 

我想請問 
設某一物件的已存好屬性 
後來可以再update它嗎 

假設temp為[44,7,16] 
可以update為[44,7,16,8]或[44,7,16,8,22]嗎? 
重點就是已存好資料庫的值 
可以透過什麼方式更動它嗎 

另外,我可以由temp[0]、temp[1]、temp[2] 
各別找出它們對應的另一屬性 

假設temp[0]、temp[1]、temp[2] 
分別代表第一row、第二row、第row的圖片url屬性 
要怎麼利用temp求出這三個row的圖片url屬性並顯示呢

2011年05月10日 星期二 13:19

有点糊涂

2011年05月10日 星期二 13:38

首先 謝謝您回應

不好意思 表達不好

我盡力再試著說明

看是否會清楚點

在models.py裡

建置class Photo(models.Model):

裡有許多屬性

title = models.CharField(max_length=100)#圖片標題

pgm_url = models.CharField(max_length=255, blank=True)#圖片連結路徑

matches=models.TextField(blank=True)#匹配個數

等等相關屬性

 

第一個問題:

透過演算法已存入第三row之matches屬性

[44,7,16]#因為photo.id>3 (已存入超過三筆的資料)

後來可以再透過演算法update這個list

如變成44,7,16,8]嗎?

 

第二個問題:

因為[44,7,16]是透過photo.id=1,2,3而得的數值,

因此想利用[44,7,16]去找出photo.id=1,2,3各別的photo.pgm_url

請問有什麼方式可以對應找出photo.pgm_url並顯示圖片呢?

2011年05月11日 星期三 20:38

matches是text字段对吧?表达式为:matches=“[44,7,16]”,然后现在的需求是想update变成matches=“[44,7,16,8]”对吧?

如果是这样的话,那么可以用simplejson库进行dumps存入,loads进行取出,然后append后dumps成字符串,其实就是标准的json数据格式存入,就ok了

在python2.6+中,内置了simplejson模块,直接调用即可:import simplejson

如果使用的是django1.2+版本,也可以这样调用:from django.utils.simplejson import  simplejson

从数据库取出时:yourList = simplejson.loads(textList)

然后:yourList.append(8)

存入数据库的时候:simplejson.dumps(yourList)

2011年05月11日 星期三 21:09

哇....受教了

謝謝您的回覆

馬上再來試試看

剛才又遇到問題

就是不能理想的篩選圖片

請問有好解嗎?

 

延續上兩樓我描述的Photo模型

假設有圖片

測試資料庫已有之前上傳的6張圖片

[<Photo: 01>, <Photo: 02>, <Photo: 03>, <Photo: 04>,<Photo: 05>,<Photo: 06>]

****重點來了****

就是依查詢圖片顯示相關的圖片

 

假如第5張(特徵點數900)的匹配數也就是與前4張的匹配數

形成list儲存matches欄位,設[0,822,8,16]

分別記錄前4張的匹配數,

即第5張與第1張匹配數為0

第5張與第2張匹配數為822

第5張與第3張匹配數為8

第5張與第4張匹配數為16

按第5張圖片時,約會顯示第2張圖片

(第3 4張match數太少,第1張則是無match)

但我此做法是取出len(list)

display=Photo.objects.all()[:len(list)]

這樣只會顯示list長度,即是4張圖片,而非共6張圖片

[<Photo: 01>, <Photo: 02>, <Photo: 03>, <Photo: 04>]

但其實效果是只要顯示

[<Photo: 02>]

應該是要加上filter

但不知該怎麼設filter將我用textfield儲存的list加以利用?

麻煩指教,謝謝。

2011年05月11日 星期三 23:31

x =[0,822,8,16]

y = ["<Photo: 01>", "<Photo: 02>", "<Photo: 03>", "<Photo: 04>"]

#因为数据库中x,y是个对应关系,所以可以使用zip函数匹对,然后在dict;再用个列表推导式就可以得到你要的数据了

xyDict = dict(zip(x,y))

print [xyDict[i] for i in xyDict if i==max(xyDict)]

#print ['<Photo: 02>']

 

2011年05月12日 星期四 01:49

太感謝了 非常有幫助

最後一問 若次要匹配數的圖片也要顯示呢?

請問怎麼做?

#print ['<Photo: 02>', "<Photo: 03>", "<Photo: 04>"]

2011年05月12日 星期四 17:52

鎮重感謝刘泽民朋友

已解決!!!!

 

只會在[xyDict[i] for i in xyDict if i==max(xyDict)]

阙值=Threshold

換成[xyDict[i] for i in xyDict if i!=0 and i>Threshold]

其它人有不同的做法

歡迎一起研究分享

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2020

    京ICP备05028076号