Hmm... I do see what you're saying.

The line in question, however, should respect subclasses. So your
example wouldn't fail in the case of a proper subclass.

I checked out that thread and I saw Russel commented on it and
ironically he mentioned contrib.comments as well.

One thing you say is 'providing abstract models feels really awkward'--
Why?

It seems like you almost want an 'attributes_for' option in the model
Meta options whereby one model can stand-in for another model. Still,
a lot of your proposal seems to rely on a developer's 'best
practices'--aka something akin to contrib.comments' get_model() use in
views and form (which can't be codified with patches, really).

-Steve

PS: One nag I have about get_model() is that is singular. Sure,
contrib.comments happens to only have one extensible but what about
when there's more?

On Sep 27, 5:45 pm, Klaas van Schelven <klaasvanschel...@gmail.com>
wrote:
> There's a quite a few things that I don't like about the get_model
> approach. I'll focus on one though: contrib.comment's own models do
> not respect it.
>
> Consider a customized model for comments (the model MyComment in
> my_comments)
> so in settings.py we put:
> COMMENTS_APP = 'my_comments'
>
> then we do the following:
> from django.contrib.comments.models import CommentFlag
> flag = CommentFlag()
> from django.contrib.comments import get_model
> mycomment = get_model().objects.get()
> flag.comment = mycomment
>
> Traceback (most recent call last):
>   File "<console>", line 1, in <module>
>   File "...django/db/models/fields/related.py", line 318, in __set__
>     self.field.name, self.field.rel.to._meta.object_name))
> ValueError: Cannot assign "<MyComment: MyComment object>":
> "CommentFlag.comment" must be a "Comment" instance.
>
> You see the problem? Any help thinking about the solution is much
> appreciated.
>
> Klaas
>
> On Sep 27, 7:57 pm, "subs...@gmail.com" <subs...@gmail.com> wrote:
>
>
>
> > I thought that's what get_model did?
>
> > You specify your own comments app and register your own (subclass or
> > other) model within that function and its used throughout the original
> > app.
>
> > On Sep 27, 3:02 am, Klaas van Schelven <klaasvanschel...@gmail.com>
> > wrote:
>
> > > On Sep 27, 4:17 am, "subs...@gmail.com" <subs...@gmail.com> wrote:
>
> > > > I may be dense but is this the functional equiv of cobtrib.comments
> > > > get_model()?
>
> > > Nope.
> > > Rather, it's a way to subclass models that are provided by reusable
> > > apps, and letting the reusable app use the subclassed instance
> > > throughout.
>
> > > > On Sep 26, 8:28 am, Klaas van Schelven <klaasvanschel...@gmail.com>
> > > > wrote:
>
> > > > > Hi all,
>
> > > > > I'm looking for a bit of input for making Django's apps a bit more
> > > > > extendable, either by modifying Django or (preferably) by coming up
> > > > > with a common language on top op Django. The main painpoint are
> > > > > extendable models. The idea of 'extendable' is that models from
> > > > > reusable apps can be extended in any concrete project. The reusable
> > > > > apps should refer to their own models in such a way that they will get
> > > > > the concrete implementation (extension).
> > > > > Class based models if you will.
>
> > > > > Context can be found 
> > > > > here:http://groups.google.com/group/django-users/browse_thread/thread/2287...
>
> > > > > Currently, apps usually refer to their own models by simply importing
> > > > > them from models.py and referring to them. This obviously will not
> > > > > work, so any solution will need some kind of registry, or instance of
> > > > > "app". If "app" is an instance of a class referring to it can be done
> > > > > in an extendible way (simply by using Python's inheritance mechanism).
>
> > > > > I've put an example of this approach 
> > > > > here:http://bitbucket.org/vanschelven/extendible_app_experiment/src/0862ce...
>
> > > > > Which incorporates the above idea of an app class & instance in blog/
> > > > > __init__.py.
>
> > > > > abstract_blog/abstract_models.py and blog/models.py
>
> > > > > The key sections are:
> > > > > (in abstract_models)
>
> > > > >     def get_AbstractPage(self):
> > > > >         class AbstractPage(models.Model):
> > > > >             body = models.TextField()
> > > > >             category = models.ForeignKey(self.app.models.Category)
>
> > > > >             class Meta:
> > > > >                 abstract = True
> > > > >                 #app_label = 'abstract_blog'
> > > > >         return AbstractPage
> > > > >     AbstractPage = property(get_AbstractPage)
>
> > > > > (in models)
> > > > >     def get_Category(self):
> > > > >         class Category(self.AbstractCategory):
> > > > >             some_added_field = models.IntegerField()
> > > > >         return Category
> > > > >     Category = property(get_Category)
>
> > > > > As you can see, it is possible to refer to "the apps real
> > > > > implementation of Category" (self.app.models.Category, or just
> > > > > self.Category) from the abstract model. Less neat: the cruft that's
> > > > > needed to pass self into AbstractPage for reference (3 lines per
> > > > > class: def, return & property).
>
> > > > > In a more recent version I've managed to factor those lines away at
> > > > > the cost of a lot of 
> > > > > magic.http://bitbucket.org/vanschelven/extendible_app_experiment/src/2b8eb6...
>
> > > > > class AbstractModels(object):
> > > > >     #...
> > > > >     class AbstractPage(shmodels.Model):
> > > > >         body = shmodels.TextField()
> > > > >         category =
> > > > > shmodels.ForeignKey(Zelf("app.models.Category"))
>
> > > > > Neet uh? Self referral without an actual introduction of "self".
>
> > > > > I may look for the general case of Zelf & Zelf2 and shmodels and
> > > > > whatever... but I'd like to know that this is a path worth following.
> > > > > In other words: am I missing really obvious, more simple solutions
> > > > > here?
>
> > > > > ciao,
> > > > > Klaas

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

Reply via email to