0 0

關於django與mysql問題3

大家好
有兩個問題請教

我想請問
設某一物件的已存好屬性
後來可以再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屬性並顯示呢

问题补充:您好 非常感謝您的回答
受用無窮
參閱您第一個解答 已順利解決

不過第二個解答
很可惜沒解決到
再敘述我的現況

目前是利用django架設
由圖片特徵做A、B圖片匹配的網站
利用的演算法是
重點可以求出三個數字
A圖片特徵數(integer)
B圖片特徵數(integer)
AB圖片匹配數(integer)

本來想法是
上傳每一圖片
就計算它的特徵數
並將它與已存好圖片逐一比對
計算匹配數用list記錄
如temp=[44,7,16,8]
就是上傳第五張圖片時
與前四張圖片匹配的數值
可好像model沒有list的field
我就用textfield記錄

但問題來了
似乎textfield不能適用您第二題的解法
用了temp[0],不能精確指到44,會指到'['
請問還有別的解決方式嗎?
還有可以不限制單一id嗎?
因為是想讓每一圖片都可依匹配數顯示相關圖片
或者是我整體想法在django上
還有別的做法呢?
麻煩指教 謝謝


dream_hanker 写道
假设lz是在视图函数里进行处理:
第一个问题:可以update,首先导入模型类:假设你的模型是这样的,
from myproject.myapp.models import Book

然后运行通过条件获取相应的对象,在这里我通过关键字
b = Book.objects.get(pk=1)
pk=1表示获取主键为1的对象,你也可以用其他的关键字参数,Book.objects.filter(关键字参数)也是一个很好的方法;第三步,就可以更改属性了,
b.temp=[44,7,16,8]
最后一步:保存修改,
b.save()


第二个问题,流程基本如下
from myproject.myapp.models import Book
b = Book.objects.get(pk=1)
url1 = b.temp[0]
url2 = b.temp[1]
url3 = b.temp[2]
//自己处理


这些操作可以在shell下操作一下,在应用程序的当前目录运行./manage.py shell 进入shell,其他步骤同上,很方便的


问题补充:有試了dream_hanker您的方法
是可以用textfield和list的轉換
但重點顯示相關圖片
還是試不出來呢
會再試試

再次描述目前問題
class Photo(models.Model):
    title = models.CharField(max_length=100)#圖片標題
    pgm_url = models.CharField(max_length=255, blank=True)#圖片連結路徑

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


測試資料庫已有之前上傳的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加以利用?

麻煩請大家指教,謝謝。

问题补充:
dream_hanker 写道
有一些细节,我先说一下:
1、pgm_url字段有现成的变量类型URLField用来存储URL,本身添加了一些验证,lz用了CharField可以换成URLField;
2、不知楼主是怎么保证Photo.objects.all()[:len(list)] 和 matches里面的数据是对应的,这里我给出两种方法:
第一种,设定QuerySet默认的排序方式
class Photo(models.Model): 
    //...
    class Meta:
        ordering = ['字段变量名']

第二种,返回QuerySet对象时通过order_by方法指定
Photo.objects.all().order_by('字段变量名')


下面假设顺序是对应的,返回最佳匹配对象的代码如下:
//假设当前图片对象为p
L = eval(p.matches) #转换为list对象
maxval, maxpos = max([ (L[i], i) for i in range(len(L)) ])#最大的匹 配数及其位置 
mp = Photo.objects.all()[maxpos] #对应的图片对象
//TO DO


再次感謝您回答
但有問題 若只加maxpos
會出現Caught TypeError while rendering: 'Photo' object is not iterable

那個Photo.objects.all()[:len(list)] 和 matches里面的數據
之所以會對應 是因為list 根據演算法 逐一與之前每一張append出來的
我也是要讓他們對應 才會選擇用list儲存(但缺點list不包括後來儲存的)
而因為list順序 後來會整理降冪排列 甚至要選出最多和其次接近的數值
及去除0matche數的photo顯示 困擾好久

另外試用劉姓友人的方法 似乎可行
x =[0,822,8,16]
y = ["<Photo: 01>", "<Photo: 02>", "<Photo: 03>", "<Photo: 04>"]
xyDict = dict(zip(x,y))
print [xyDict[i] for i in xyDict if i==max(xyDict)]
#print ['<Photo: 02>']
不過 這個解法 只能顯示最高的
希望次要 接近的也可以顯示出來
#print ['<Photo: 02>', "<Photo: 03>", "<Photo: 04>"]
請問有好想法嗎?謝謝。

问题补充:
dream_hanker 写道
不好意思,方案2也得先排序, ,要不就找不到最佳匹配的图片了,用list推导式就不太合适了,你可以用循环代替,这样可以使用break退出循环,这样最后一个满足条件的元素之后的元素就不用比较了

怪哉
用您的xylist方法
在html可以顯示出圖片長度
不過 顯示不出來圖片
可能是url哪邊出問題
再試試看囉

不由得說 大大您真是非常有耐心
也很厲害 我遇到什麼問題 總有方法可以解決
再次大大的感謝
2011年5月10日 11:47

6个答案 按时间排序 按投票排序

0 0

采纳的答案

max([ (L[i], i) for i in range(len(L)) ])返回的是一个tuple(元组),其中第二个元素是索引值,需要“解压”到变量中才能作索引值;
下面是改进你好友的方法:

x =[0,822,8,16] 
y = Photo.objects.all()[:len(x)] 
xylist = zip(x,y)
xylist.sort(reverse=True) #由大到小排序,xylit[0]最大,递减

关于你说的“希望次要 接近的也可以顯示出來”,我给出几个实现方案
1.若很固定的显示几个这比较容易,只要
def select(xylist, n):
    return xylist[:n]


2.设定一个阈值,其他的比较数与最大的匹配数小于这个阈值时,认为是接近的
def select(xylist, val):
    max = xylist[0][0]
    xylist = [x for x in xylist if(max-x[0])<val]

说明下,第一个方案时必须先由大到小排序,第二个方案不必排序。元素取完之后,xylist列表元素的形式与下面类似
[(822,<Photo: Photo object>),(16,<Photo: Photo object>)]#xylist的长度跟给的参数有关

我们可以通过这种方式取第一个图片的地址:xylist[0][1].pgm_url.
上面给出的两个方案都硬性规定了参数,参数可以动态产生,这跟实际应用有关,你可以根据自己的需要再编写合适的函数

2011年5月12日 11:43
0 0

应该是一些细节问题,你再看看吧

2011年5月12日 18:48
0 0

不好意思,方案2也得先排序, ,要不就找不到最佳匹配的图片了,用list推导式就不太合适了,你可以用循环代替,这样可以使用break退出循环,这样最后一个满足条件的元素之后的元素就不用比较了

2011年5月12日 11:50
0 0

有一些细节,我先说一下:
1、pgm_url字段有现成的变量类型URLField用来存储URL,本身添加了一些验证,lz用了CharField可以换成URLField;
2、不知楼主是怎么保证Photo.objects.all()[:len(list)] 和 matches里面的数据是对应的,这里我给出两种方法:
第一种,设定QuerySet默认的排序方式

class Photo(models.Model): 
    //...
    class Meta:
        ordering = ['字段变量名']

第二种,返回QuerySet对象时通过order_by方法指定
Photo.objects.all().order_by('字段变量名')


下面假设顺序是对应的,返回最佳匹配对象的代码如下:
//假设当前图片对象为p
L = eval(p.matches) #转换为list对象
maxval, maxpos = max([ (L[i], i) for i in range(len(L)) ])#最大的匹 配数及其位置 
mp = Photo.objects.all()[maxpos] #对应的图片对象
//TO DO

2011年5月11日 23:20
0 0

我好像懂了lz的意思了,现在给出不修改数据库的方案:Django是没有list的field,lz用TextField类型的变量存储

from myproject.myapp.models import Book
b = Book.objects.get(pk=1)
这样得到的b.temp就是一个字符串而不是一个list,我们可以使用内置的eval和repr函数在原对象和它的字符串表示形式之间相互转化,请看代码
>>> s = repr([44,7,16,8]) #将对象表示成字符串形式
>>> s
'[44, 7, 16, 8]'
>>> eval(s)               #用对象的字符串形式重建对象
[44, 7, 16, 8]

所以,第二题答案,我们只要加一步
from myproject.myapp.models import Book
b = Book.objects.get(pk=1)
L = eval(b.temp)
url1 = L.temp[0]
url2 = L.temp[1]
url3 = L.temp[2]

上面的是怎么读数据,同样的,存数据时,我们可以先用list进行操作,然后再用repr函数转换为字符串形式村到TextField类型的变量里。
看看行不行

2011年5月11日 14:51
0 0

假设lz是在视图函数里进行处理:
第一个问题:可以update,首先导入模型类:假设你的模型是这样的,

from myproject.myapp.models import Book

然后运行通过条件获取相应的对象,在这里我通过关键字
b = Book.objects.get(pk=1)
pk=1表示获取主键为1的对象,你也可以用其他的关键字参数,Book.objects.filter(关键字参数)也是一个很好的方法;第三步,就可以更改属性了,
b.temp=[44,7,16,8]
最后一步:保存修改,
b.save()


第二个问题,流程基本如下
from myproject.myapp.models import Book
b = Book.objects.get(pk=1)
url1 = b.temp[0]
url2 = b.temp[1]
url3 = b.temp[2]
//自己处理


这些操作可以在shell下操作一下,在应用程序的当前目录运行./manage.py shell 进入shell,其他步骤同上,很方便的

2011年5月11日 09:24

相关推荐

    python+django+mysql电影推荐系统源码,毕业设计.zip

    python+django+mysql电影推荐系统源码,毕业设计 python+django+mysql电影推荐系统源码,毕业设计 python+django+mysql电影推荐系统源码,毕业设计 python+django+mysql电影推荐系统源码,毕业设计 python+...

    使用Django+MySQL实现的在线电影推荐系统源码.zip

    使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现...

    基于Python+Django+MySQL的个人博客系统源码+全部数据(毕业设计).zip

    基于Python+Django+MySQL的个人博客系统源码+全部数据(毕业设计).zip 已获导师指导并通过的高分项目。可作为毕业设计、课程设计、期末大作业等。 基于Python+Django+MySQL的个人博客系统源码+全部数据(毕业设计...

    python+django+mysql电影推荐系统源码-高分毕业设计

    python+django+mysql电影推荐系统源码-高分毕业设计,含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单部署,就可以使用。...

    Django + python + mysql的在线考试系统源码.zip

    Django + python + mysql的在线考试系统源码 Django + python + mysql的在线考试系统源码 Django + python + mysql的在线考试系统源码 Django + python + mysql的在线考试系统源码 Django + python + mysql的...

    Django读取Mysql数据并显示在前端的实例

    在本实例中,我们将探讨如何使用Django框架从MySQL数据库中读取数据并将其呈现到前端页面上。Django是一个强大的Python Web开发框架,而MySQL则是一种广泛使用的关系型数据库管理系统。结合两者,我们可以构建动态的...

    基于Python+Django+MySQL+Redis的仿天天生鲜商城源码+项目说明.zip

    基于Python+Django+MySQL+Redis的仿天天生鲜商城源码+项目说明.zip 基于Django的商城练手项目(天天生鲜商城项目) 注:本项目适用于Django初学者,作为练习学习使用。该项目是传智播客Python教程中的生鲜电商的...

    django+Mysql增删改查

    接下来,我们将重点关注Django如何与MySQL数据库进行交互,实现增删改查(CRUD)操作。 1. **安装MySQL数据库驱动**:在Django中使用MySQL,首先需要安装`mysqlclient`或`pymysql`库作为数据库驱动。 2. **配置...

    django+mysql电商推荐系统

    Django通过其内置的ORM(对象关系映射)工具可以轻松地与MySQL进行交互。 4. **推荐系统算法**: - **协同过滤**:基于用户行为历史,找出相似用户,推荐他们喜欢的商品给目标用户。 - **基于内容的推荐**:分析...

    基于PythonDjango+MySQL的在线考试系统源码(毕设项目).zip

    基于PythonDjango+MySQL的在线考试系统源码(毕设项目).zip基于PythonDjango+MySQL的在线考试系统源码(毕设项目).zip基于PythonDjango+MySQL的在线考试系统源码(毕设项目).zip基于PythonDjango+MySQL的在线考试系统...

    python3 django+mysql+bootstrap增删改查

    在IT行业中,Python Django框架与MySQL数据库以及Bootstrap前端框架的结合使用是常见的Web开发模式。这个主题涵盖了四个关键知识点:Python、Django、MySQL和Bootstrap,它们各自在Web开发中的角色及其协同工作的...

    基于Python+Django+MySQL的小型员工管理系统

    【基于Python+Django+MySQL的小型员工管理系统】 在IT领域,开发一款小型的员工管理系统是一种常见的实践,它可以帮助组织高效地管理人力资源信息。在这个项目中,开发者利用了Python的Django框架和MySQL数据库来...

    django+mysql留言板

    通过学习和实践这个项目,开发者可以熟悉Django的MVT架构,并了解如何将Python Web应用与MySQL数据库集成。尽管项目可能还存在一些未完善之处,但它为扩展和优化提供了广阔的空间,例如添加更多的功能,优化用户体验...

    Django Mysql的安装与连接

    Mysql与Django虽是独立的系统,但它们之间的连接是Web开发过程中的核心内容。为了实现Django与Mysql的连接,开发者需要了解一系列的配置与操作步骤。首先,安装Mysql数据库是基本的前提,而Mysql数据库安装完成后,...

    django整合mysql实现对外提供接口

    这个项目中,我们学习了如何使用Django框架创建一个与MySQL数据库集成的Web应用,并通过RESTful API对外提供服务。涵盖了Django的基本命令、项目搭建、数据库配置、模型定义、视图创建、URL路由以及RESTful API设计...

    基于Django+MySQL的员工薪资管理系统源码.zip

    Django与MySQL的集成通过Django的数据库API实现,使得数据的CRUD(创建、读取、更新和删除)操作变得简单而高效。 在系统设计上,管理员可以通过后台界面添加、修改和删除员工信息,包括姓名、职位、入职日期等。...

    python+django+mysql+家政服务网站管理系统

    本python+django+vue+Elementui+mysql系统可以定制,采用pycharm开发,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护等特点,覆盖知识面大,非常适合作为计算机专业的同学参考资料进行学习....

    采用Django+Python+Mysql完成的图书管理系统源码.zip

    6. **数据库交互(Database Interaction)**:Django的ORM(对象关系映射)层使得与MySQL数据库的交互变得简单,无需直接编写SQL语句。 7. **用户认证与权限(Authentication & Authorization)**:Django内置了...

    python+django+mysql 网页系统.zip

    在本项目中,我们探索如何使用Python的Django框架与MySQL数据库来构建一个完整的网页系统。这个系统将涵盖基础的数据库操作,如增(Create)、删(Delete)、改(Update)和查(Query)。让我们详细了解一下这个过程...

    Vue+Django+Mysql 选课系统

    在选课系统中,Mysql存储了如课程信息(课程编号、课程名、学分等)、学生信息(学号、姓名、年级等)以及选课关系(学号与课程编号的对应关系)。Django的ORM层使得开发者可以方便地进行数据库操作,如创建表、插入...

Global site tag (gtag.js) - Google Analytics