On Jun 24, 7:01 pm, Sector7B <joe.greenaw...@gmail.com> wrote:
> Thanks for the feedback and the link, all good stuff!
> I looked at what i had written, and I think a better way to ask the
> question is:
> What are the mechanics behind providing "choice_set.all()"?
> For example i have a field "choice" so having "_set" (concatenated) is
> that generated when i run syncdb somewhere, or is that dynamically
> interpreted at runtime?
> My background leads me to think there would be a choice.set().all(),
> the "_set" seems weird (to me) unless its generated.
>
> Thanks again,
> -j
>

It's dynamically generated when the model class is defined. Fields can
define a 'contribute_to_class' method, which is responsible for
defining dynamic properties/methods on the model class. When the field
is instantiated - which happens when the class is defined, ie when its
module is first imported - the field's contribute_to_class method is
executed and the related manager is created. You can see the code for
this in django.db.models.fields.related.RelatedField. (Actually you'll
see that contribute_to_class calls do_related_class, which calls
contribute_to_related_class, which sets up the descriptor on the
related model.)

A very good guide to all this is Marty Alchin's book Pro Django, which
goes into depth as to how the model metaclasses work.
--
DR.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to