Python论坛  - 讨论区

标题:[python-chinese] [django]多对多保存方法

2006年10月18日 星期三 19:01

风向标 vaneoooo在gmail.com
星期三 十月 18 19:01:25 HKT 2006

¿´ÁËdjango¹Ù·½µÄÀý×Ó£¬×Ô¼º·Â×Åдһ¸ö¶à¶Ô¶àµÄtag²¿·Ö¡£

            for t in tags:
                tagobj = Tags(tagname = t)
                tagobj.save()
                tagobj.username.add(request.user)
                tagobj.save()

userÊÇΪÁËͳ¼Æ¸ÃtagΪÄÄЩÓû§µÄ˽ÈËtag£¬ÔÚÈ«¾Ö²é¿´tagʱ²»»áÏÔʾ£¬ÔÚÓû§²é¿´×Ô¼ºËùʹÓõÄtagʱÏÔʾ

ÓиöÎÊÌâÊÇ£¬Ã²ËÆûÓÐsave¾ÍÎÞ·¨¼ÌÐø¶à¶Ô¶à×ֶεÄÌí¼Ó£¨ÈçºóÃæµÄtagobj.username.add(request.user)£©

¿ÉÊÇÈç¹ûÏñÕâÑù£¬Ã¿Ìí¼ÓÒ»¸ötagÎÒ¾ÍÒªsaveÁ½´Î£¬Ò»´ÎÌí¼Ó¶à¸ötagÎÒ¾ÍÊÇN´Î

ͬʱÓÐy¸öÓû§Ìí¼ÓÎÒ¾ÍÊÇN*y´Î

ÎÒ¾õµÃʵ¼ÊÓ¦ÓÃÖв»»áÕâÑù°É£¿»á²»»á¶ÔÊý¾Ý¿âЧÂʲúÉú½Ï´óÓ°Ï죿Èç¹ûÓУ¬Äܹ»Ö¸µãÏÂÓÅ»¯·½·¨ÄØ£¿Ð»Ð»
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20061018/904b9f3b/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年10月18日 星期三 20:10

limodou limodou在gmail.com
星期三 十月 18 20:10:41 HKT 2006

On 10/18/06, 风向标 <vaneoooo在gmail.com> wrote:
>
> 看了django官方的例子,自己仿着写一个多对多的tag部分。
>
>             for t in tags:
>                 tagobj = Tags(tagname = t)
>                 tagobj.save()
>                 tagobj.username.add(request.user)
>                 tagobj.save()
>
> user是为了统计该tag为哪些用户的私人tag,在全局查看tag时不会显示,在用户查看自己所使用的tag时显示
>
> 有个问题是,貌似没有save就无法继续多对多字段的添加(如后面的tagobj.username.add(request.user))
>
> 可是如果像这样,每添加一个tag我就要save两次,一次添加多个tag我就是N次
>
> 同时有y个用户添加我就是N*y次
>
> 我觉得实际应用中不会这样吧?会不会对数据库效率产生较大影响?如果有,能够指点下优化方法呢?谢谢

对于一次加入多个你再看一下文档,是可以一次加入多个的。save的目的是要产生id,不save的话id就生成不了。

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年10月18日 星期三 20:18

风向标 vaneoooo在gmail.com
星期三 十月 18 20:18:50 HKT 2006

limodouÐÖ

¿ÉÊÇÎÒËùÒª¼ÓÈëµÄ¾ÍÓû§¾ÍuserÒ»¸ö
ÒòΪ´´½¨tagµÄÓû§Í¨³£¾ÍÒ»¸ö£¨ºóÆÚ¿ÉÄÜÊǶà¸öÖظ´Ê¹ÓÃͬÑùtag£©£¬Ä¿Ç°¶àµÄ²¿·ÖÊÇtag
Ò»¸öÓû§¿ÉÄÜÒ»´ÎÉú³É¶à¸ötag

È»ºóÿ¸ötagÒªÖ¸¶¨Ê¹ÓÃËûµÄÓû§¡£»¹ÊǵÃÿһ¸ö¶¼save£¬È»ºóÔÙÖ¸¶¨Éú³É¸ÃtagµÄÓû§ÊÇË­

ºÃÏñûÓÐÒ»´ÎÌí¼Ó¶à¸ötag£¬È»ºóÖ»Ö¸¶¨Ò»´Îuser£¬È»ºóÓ¦Óõ½Ö®Ç°ËùÓÐtag¶ÔÏóusername×ֶεķ½·¨°É£¿

²»ÊÇÿ¸ötag¶ÔÏóµÄusername×ֶζ¼ÒªÖ¸¶¨Ò»´Îuser£¬²ÅÄܽ¨Á¢¶à¶Ô¶à¹ØϵÂð£¿

=   = ºÃÏñ»¹ÊǵÄÿ¸ösaveÒ»ÏÂ


2006/10/18, limodou <limodou在gmail.com>:
>
> On 10/18/06, ·çÏò±ê <vaneoooo在gmail.com> wrote:
> >
> > ¿´ÁËdjango¹Ù·½µÄÀý×Ó£¬×Ô¼º·Â×Åдһ¸ö¶à¶Ô¶àµÄtag²¿·Ö¡£
> >
> >             for t in tags:
> >                 tagobj = Tags(tagname = t)
> >                 tagobj.save()
> >                 tagobj.username.add(request.user)
> >                 tagobj.save()
> >
> > userÊÇΪÁËͳ¼Æ¸ÃtagΪÄÄЩÓû§µÄ˽ÈËtag£¬ÔÚÈ«¾Ö²é¿´tagʱ²»»áÏÔʾ£¬ÔÚÓû§²é¿´×Ô¼ºËùʹÓõÄtagʱÏÔʾ
> >
> > ÓиöÎÊÌâÊÇ£¬Ã²ËÆûÓÐsave¾ÍÎÞ·¨¼ÌÐø¶à¶Ô¶à×ֶεÄÌí¼Ó£¨ÈçºóÃæµÄtagobj.username.add(request.user)£©
> >
> > ¿ÉÊÇÈç¹ûÏñÕâÑù£¬Ã¿Ìí¼ÓÒ»¸ötagÎÒ¾ÍÒªsaveÁ½´Î£¬Ò»´ÎÌí¼Ó¶à¸ötagÎÒ¾ÍÊÇN´Î
> >
> > ͬʱÓÐy¸öÓû§Ìí¼ÓÎÒ¾ÍÊÇN*y´Î
> >
> > ÎÒ¾õµÃʵ¼ÊÓ¦ÓÃÖв»»áÕâÑù°É£¿»á²»»á¶ÔÊý¾Ý¿âЧÂʲúÉú½Ï´óÓ°Ï죿Èç¹ûÓУ¬Äܹ»Ö¸µãÏÂÓÅ»¯·½·¨ÄØ£¿Ð»Ð»
>
> ¶ÔÓÚÒ»´Î¼ÓÈë¶à¸öÄãÔÙ¿´Ò»ÏÂÎĵµ£¬ÊÇ¿ÉÒÔÒ»´Î¼ÓÈë¶à¸öµÄ¡£saveµÄÄ¿µÄÊÇÒª²úÉúid£¬²»saveµÄ»°id¾ÍÉú³É²»ÁË¡£
>
> --
> I like python!
> UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
> My Blog: http://www.donews.net/limodou
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20061018/c278de91/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年10月18日 星期三 20:21

limodou limodou在gmail.com
星期三 十月 18 20:21:44 HKT 2006

On 10/18/06, 风向标 <vaneoooo在gmail.com> wrote:
>
> limodou兄
>
> 可是我所要加入的就用户就user一个
> 因为创建tag的用户通常就一个(后期可能是多个重复使用同样tag),目前多的部分是tag
> 一个用户可能一次生成多个tag
>
> 然后每个tag要指定使用他的用户。还是得每一个都save,然后再指定生成该tag的用户是谁
>
> 好像没有一次添加多个tag,然后只指定一次user,然后应用到之前所有tag对象username字段的方法吧?
>
> 不是每个tag对象的username字段都要指定一次user,才能建立多对多关系吗?
>
> =   = 好像还是的每个save一下
>
>
那你对每个创建的tag做一个循环就可以了。先生成tag,然后增加用户,循环一下不就行了。

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年10月18日 星期三 20:35

风向标 vaneoooo在gmail.com
星期三 十月 18 20:35:20 HKT 2006

ÏÖÔÚÒ²ÊÇ×ܹ²Ñ­»·Ò»´Î

¾ÍÊÇÕë¶ÔtagµÄ×ֵ䣬Öð¸öÈ¡³ötagÈ»ºó±£´æ

Îҵĵ£ÓÇÊÇҪƵ·±µÄ¶ÔÊý¾Ý¿âÖ´ÐдæÈësave£¨£©
»á²»»á¶ÔÐÔÄÜÓֽϴóÓ°Ïì
Èç¹ûÓУ¬Õâ¸ö´úÂëÄܲ»ÄÜÔÙÔõôÓÅ»¯Ò»ÏÂ


2006/10/18, limodou <limodou在gmail.com>:
>
> On 10/18/06, ·çÏò±ê <vaneoooo在gmail.com> wrote:
> >
> > limodouÐÖ
> >
> > ¿ÉÊÇÎÒËùÒª¼ÓÈëµÄ¾ÍÓû§¾ÍuserÒ»¸ö
> > ÒòΪ´´½¨tagµÄÓû§Í¨³£¾ÍÒ»¸ö£¨ºóÆÚ¿ÉÄÜÊǶà¸öÖظ´Ê¹ÓÃͬÑùtag£©£¬Ä¿Ç°¶àµÄ²¿·ÖÊÇtag
> > Ò»¸öÓû§¿ÉÄÜÒ»´ÎÉú³É¶à¸ötag
> >
> > È»ºóÿ¸ötagÒªÖ¸¶¨Ê¹ÓÃËûµÄÓû§¡£»¹ÊǵÃÿһ¸ö¶¼save£¬È»ºóÔÙÖ¸¶¨Éú³É¸ÃtagµÄÓû§ÊÇË­
> >
> > ºÃÏñûÓÐÒ»´ÎÌí¼Ó¶à¸ötag£¬È»ºóÖ»Ö¸¶¨Ò»´Îuser£¬È»ºóÓ¦Óõ½Ö®Ç°ËùÓÐtag¶ÔÏóusername×ֶεķ½·¨°É£¿
> >
> > ²»ÊÇÿ¸ötag¶ÔÏóµÄusername×ֶζ¼ÒªÖ¸¶¨Ò»´Îuser£¬²ÅÄܽ¨Á¢¶à¶Ô¶à¹ØϵÂð£¿
> >
> > =   = ºÃÏñ»¹ÊǵÄÿ¸ösaveÒ»ÏÂ
> >
> >
> ÄÇÄã¶Ôÿ¸ö´´½¨µÄtag×öÒ»¸öÑ­»·¾Í¿ÉÒÔÁË¡£ÏÈÉú³Étag£¬È»ºóÔö¼ÓÓû§£¬Ñ­»·Ò»Ï²»¾ÍÐÐÁË¡£
>
> --
> I like python!
> UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
> My Blog: http://www.donews.net/limodou
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20061018/d1389545/attachment.htm 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年10月18日 星期三 20:43

limodou limodou在gmail.com
星期三 十月 18 20:43:43 HKT 2006

On 10/18/06, 风向标 <vaneoooo在gmail.com> wrote:
> 现在也是总共循环一次
>
> 就是针对tag的字典,逐个取出tag然后保存
>
> 我的担忧是要频繁的对数据库执行存入save()
> 会不会对性能又较大影响
> 如果有,这个代码能不能再怎么优化一下
>
如果有事务的话,应该性能没有什么问题。你不是说有多个tag,怎么现在又循环一次了?

-- 
I like python!
UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
My Blog: http://www.donews.net/limodou

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2006年10月18日 星期三 20:46

风向标 vaneoooo在gmail.com
星期三 十月 18 20:46:59 HKT 2006

=  =£¡

¶Ô²»ÆðlimodouÐÖ¡£ÎÒ±í´ïÓÖÆçÒå¡£

ÎÒÊÇÖ¸¶à¸ötag´æ·Åµ½Ò»¸ötags×ÖµäÀï

¶ÔÕâ¸ötags×Öµä¾Í½øÐÐÒ»´ÎÑ­»·£¬Öð¸öÈ¡³öÀïÃæµÄËùÓÐtagÈ»ºó±£´æÆðÀ´¡£

ÔÙ¶Ôÿ¸ötag ¶ÔÏóÖ¸¶¨ËüµÄʹÓÃÕß»òÕß´´½¨Õß

Àí½âÁË£¬È«²¿×öÍêÒÔºóÎÒÔÙÖع¹ËùÓдúÂ룬ÓÅ»¯ËûÃÇ°É

лл£¡£¡



2006/10/18, limodou <limodou在gmail.com>:
>
> On 10/18/06, ·çÏò±ê <vaneoooo在gmail.com> wrote:
> > ÏÖÔÚÒ²ÊÇ×ܹ²Ñ­»·Ò»´Î
> >
> > ¾ÍÊÇÕë¶ÔtagµÄ×ֵ䣬Öð¸öÈ¡³ötagÈ»ºó±£´æ
> >
> > Îҵĵ£ÓÇÊÇҪƵ·±µÄ¶ÔÊý¾Ý¿âÖ´ÐдæÈësave£¨£©
> > »á²»»á¶ÔÐÔÄÜÓֽϴóÓ°Ïì
> > Èç¹ûÓУ¬Õâ¸ö´úÂëÄܲ»ÄÜÔÙÔõôÓÅ»¯Ò»ÏÂ
> >
> Èç¹ûÓÐÊÂÎñµÄ»°£¬Ó¦¸ÃÐÔÄÜûÓÐʲôÎÊÌâ¡£Äã²»ÊÇ˵Óжà¸ötag£¬ÔõôÏÖÔÚÓÖÑ­»·Ò»´ÎÁË£¿
>
> --
> I like python!
> UliPad <>: http://wiki.woodpecker.org.cn/moin/UliPad
> My Blog: http://www.donews.net/limodou
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20061018/65c79c11/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

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

    你的回复:

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

    Zeuux © 2025

    京ICP备05028076号