2007年12月02日 星期日 17:59
ÎÒÃÇÖªµÀ Django ÖпÉÒÔ×Ô¶¨Òå Manager Ìṩ¶îÍâµÄ¹¦ÄÜ£¬±ÈÈ磺
class PersonManager(models.Manager):
...
def get_profile(self, name):
profile = *self.get(name=name)
...
*
class PersonProfile(models.Model):
...
objects = PersonManager()
...
Õâʱºò£¬¿ÉÒÔ PersonProfile.objects.get_profile('abc') À´µÃµ½½á¹û¡£µ«ÕâÀïÎÒʼÖÕûÓÐÃ÷°×
PersionProfile ÊÇÈçºÎ¸½¼Óµ½ PersionManager Éϵģ¬self.get() Ôõô¾ÍÖªµÀÒªÔÚ PersonProfile
ÉϲéÕÒ£¬¶ø²»ÊDZðµÄ£¿
²é¿´ÁËÔ´´úÂ룬get() ·½·¨ÊÇÕâÑùµÄ£º
def get(self, *args, **kwargs):
return self.get_query_set().get(*args, **kwargs)
query_set ÕâÑùµÃµ½£º
def get_query_set(self):
"""Returns a new QuerySet object. Subclasses can override this
method
to easily customize the behavior of the Manager.
"""
return QuerySet(*self.model*)
µ½ÕâÀï¾Í¿´²»¶®ÁË£¬ÆÚÍû´ó¼Ò¸ø½²½²¡£
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20071202/5a5dd859/attachment-0001.html
2007年12月03日 星期一 01:36
self.get() Ôõô¾ÍÖªµÀÒªÔÚ PersonProfile ÉϲéÕÒ Ã¿Ò»¸öModel¶¼»áÓÐ×Ô¼º¶ÔÓ¦µÄManager£¬Manager¿Ï¶¨ÖªµÀ×Ô¼ºÒªÕÒʲô¡£Äã¶¼¿´µ½´úÂëÁË£¬QuerySet(self.model )¡£ÕâÀïºÜÃ÷È·£¬Ã÷°×Ä㻹ҪÎÊɶÁËÄ󡣡£ ÔÚ07-12-2£¬book4e <book4e在gmail.com> дµÀ£º > > ÎÒÃÇÖªµÀ Django ÖпÉÒÔ×Ô¶¨Òå Manager Ìṩ¶îÍâµÄ¹¦ÄÜ£¬±ÈÈ磺 > > class PersonManager(models.Manager ): > ... > def get_profile(self, name): > profile = *self.get(name=name) > ... > * > class PersonProfile(models.Model): > ... > objects = PersonManager () > ... > > Õâʱºò£¬¿ÉÒÔ PersonProfile.objects.get_profile('abc') À´µÃµ½½á¹û¡£µ«ÕâÀïÎÒʼÖÕûÓÐÃ÷°× > PersionProfile ÊÇÈçºÎ¸½¼Óµ½ PersionManager Éϵģ¬self.get() Ôõô¾ÍÖªµÀÒªÔÚ PersonProfile > ÉϲéÕÒ£¬¶ø²»ÊDZðµÄ£¿ > > ²é¿´ÁËÔ´´úÂ룬get() ·½·¨ÊÇÕâÑùµÄ£º > > def get(self, *args, **kwargs): > return self.get_query_set().get(*args, **kwargs) > > query_set ÕâÑùµÃµ½£º > > def get_query_set(self): > """Returns a new QuerySet object. Subclasses can override this > method > to easily customize the behavior of the Manager. > """ > return QuerySet(*self.model*) > > µ½ÕâÀï¾Í¿´²»¶®ÁË£¬ÆÚÍû´ó¼Ò¸ø½²½²¡£ > > _______________________________________________ > 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 > -- site:http://www.fallever.com -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20071203/4103e48f/attachment.html
2007年12月03日 星期一 22:17
Äã¸æËßÎÒµÄÊǽáÂÛ£¬ÎÒÏëÖªµÀΪʲôÓÐÕâÑùµÄ½áÂÛ¡£
return QuerySet(*self.model*) ÀïÃæµÄ model£¬Ò²¾ÍÊÇ PersonProfile£¬ÎÒÏëÊÇÔÚ PersonManager
³õʼ»¯µÄʱºò¾Í±»É趨ÁË£º
objects = PersonManager()
ÄÇô PersonManager ÊÇÈçºÎ¸ÐÖª PersonProfile µÄ£¬ÊÇ·ñºÍÏÂÃæµÄ´úÂëÓйأ¿
def __init__(self):
super(Manager, self).__init__()
# Increase the creation counter, and save our local copy.
self.creation_counter = Manager.creation_counter
Manager.creation_counter += 1
self.model = None
def contribute_to_class(self, model, name):
# TODO: Use weakref because of possible memory leak / circular
reference.
self.model = model
setattr(model, name, ManagerDescriptor(self))
if not hasattr(model, '_default_manager') or self.creation_counter <
model._default_manager.creation_counter:
model._default_manager = self
ËÆºõÓë contribute_to_class ºÜÓйØÏµ£¬µ«ÎÒûÓп´¶®Õâ¶Î´úÂëµÄÒâ˼£¬Ò²Ã»ÕÒµ½ËüÊǺÎʱ±»µ÷Óõġ£Äܲ»ÄܾßÌå½²½²£¿
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20071203/d3270344/attachment.html
2007年12月03日 星期一 23:33
û´í£¬µÄÈ·ÓëContribute_to_classÕâ¸öº¯ÊýÓйء£¶ø¸Ã·½·¨±»Ö´Ðеĵط½Ç¡Ç¡ºÃÊÇModelµÄMateClassµÄ__new__()·½·¨ÀïÃæ£º
´úÂëÕâÑùд£º
# Add Fields inherited from parents
for parent in new_class._meta.parents:
for field in parent._meta.fields:
# Only add parent fields if they aren't defined for this
class.
try:
new_class._meta.get_field(field.name)
except FieldDoesNotExist:
field.contribute_to_class(new_class, field.name)
ħ·¨ÔÚÕâÀïʵÏÖ¡£ÒªÈ«²¿¿´¶®ÕâЩ´úÂë¿ÉÄܵò¹Ò»ÏÂPythonÔªÀà±à³Ì·½ÃæµÄ¿ÎÁË¡£ £º£©
http://www-128.ibm.com/developerworks/cn/linux/l-pymeta/index.html
ÔÚ07-12-3£¬book4e <book4e在gmail.com> дµÀ£º
>
> Äã¸æËßÎÒµÄÊǽáÂÛ£¬ÎÒÏëÖªµÀΪʲôÓÐÕâÑùµÄ½áÂÛ¡£
>
> return QuerySet(*self.model*) ÀïÃæµÄ model£¬Ò²¾ÍÊÇ PersonProfile£¬ÎÒÏëÊÇÔÚ
> PersonManager ³õʼ»¯µÄʱºò¾Í±»É趨ÁË£º
>
> objects = PersonManager()
>
> ÄÇô PersonManager ÊÇÈçºÎ¸ÐÖª PersonProfile µÄ£¬ÊÇ·ñºÍÏÂÃæµÄ´úÂëÓйأ¿
>
> def __init__(self):
> super(Manager, self).__init__()
> # Increase the creation counter, and save our local copy.
> self.creation_counter = Manager.creation_counter
> Manager.creation_counter += 1
> self.model = None
>
> def contribute_to_class(self, model, name):
> # TODO: Use weakref because of possible memory leak / circular
> reference.
> self.model = model
> setattr(model, name, ManagerDescriptor(self))
> if not hasattr(model, '_default_manager') or self.creation_counter< model._default_manager.creation_counter:
> model._default_manager = self
>
> ËÆºõÓë contribute_to_class ºÜÓйØÏµ£¬µ«ÎÒûÓп´¶®Õâ¶Î´úÂëµÄÒâ˼£¬Ò²Ã»ÕÒµ½ËüÊǺÎʱ±»µ÷Óõġ£Äܲ»ÄܾßÌå½²½²£¿
>
> _______________________________________________
> 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
>
--
site:http://www.fallever.com
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20071203/cde4fe79/attachment.htm
2007年12月04日 星期二 08:41
ллÄãµÄÖ¸µã£¬ÎÒÕâ¾Í²¹¿ÎÈ¥¡£ -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20071204/31d3e98a/attachment-0001.html
Zeuux © 2025
京ICP备05028076号