On Fri, Apr 12, 2013 at 07:35:45AM -0700, Anssi Kääriäinen wrote: > On 12 huhti, 16:44, Michal Petrucha <michal.petru...@ksp.sk> wrote: > ForeignKeys have been changed a lot since 2012-11-04. The introduction > of ForeignObject (which is base for ForeignKey) means that there is > support for multicolumn joins in the ORM now, and that ForeignObject > itself is a non-concrete field (not in ._meta.virtual_fields though). > ForeignObject currently works only on ORM level, so there is no API > for creating multicolumn foreign keys. > > In any case, the GSoC proposal should take the introduction of > ForeignObject in account. tests/foreign_object contain some examples > related to ForeignObject functionality, exploring how those examples > work is a good idea.
This has been on my TODO list for a few days actually, I was going through the work done regarding #19385 [1] and noticed this. However, I still need to give it a more thorough examination to fully get a grasp on this. > Another big issue to solve is how to store the fields in model._meta. > IMO a good idea is to add all fields into some attribute ('all_fields' > as name might be good...), then separate the fields for different use > cases based on features the fields has. For example concrete_fields is > [f for f in self.all_fields if f.column], form fields are [f for f in > self.all_fields if f.form_field] (or maybe this should be called > logical fields - a multicolumn foreign key is logical, but not > concrete field, and the fields used by the foreign key are concrete > but not logical fields). The different field lists can be > cached_properties so there will be no problems from performance > perspective. As a matter of fact, this is one of the first things I did back in 2011. (-: Almost exactly like that -- _meta.fields contains all fields (except for M2M), _meta.concrete_fields, _meta.virtual_fields and I think I also needed a _meta.local_concrete (for non-inherited fields; I couldn't find a better name for it that wouldn't be too verbose). [1] https://code.djangoproject.com/ticket/19385
signature.asc
Description: Digital signature