Andy, many thanks for this idea. This is the sort of metaprogramming stuff that I think that I need. I didn't know Python at all before I began working on AppEngine, so metaclasses have escaped my attention to date. Safari, here I come!
On Nov 17, 2:32 pm, Andy Freeman <[EMAIL PROTECTED]> wrote: > Why not define a metaclass that does the mixins for you? > > class UseMixins(db.Model): > __metaclass__ = AddMixin > > class Post(UseMixins): > Mixins = Comment, > > Some code that might be useful in helping you write AddMixin can be > found > in:http://groups.google.com/group/google-appengine/browse_thread/thread/... > > If you figure out how to eliminate the explicit reference to db.Model, > please let me know. > > On Nov 17, 8:38 am, Adam <[EMAIL PROTECTED]> wrote: > > > I'm wondering if it is possible to add a field to a Model class with a > > mixin. > > > Here's my hypothetical problem: let's say that I am designing Blog > > software -- I know, I know, what an innovation! -- that features Posts > > and Comments. > > > class Post(db.Model): > > title = db.StringProperty(required=True) > > body = db.TextProperty(required=True) > > added = db.DateProperty(auto_add_now=True) > > > class Comment(db.Model): > > author = db.UserProperty() > > body = db.TextProperty() > > added = db.DateProperty() > > edited = db.DateProperty() > > > I would like Post to have a counter of the number of comments that it > > has, so I could change my definition of Post to this: > > class Post(db.Model): > > title = db.StringProperty(required=True) > > body = db.TextProperty(required=True) > > added = db.DateProperty(auto_add_now=True) > > comments_counter = db.IntegerProperty(required=True, defualt=0) > > > However, what I would really to do is have a mixin class called > > Commentable that will add a variety of useful methods to the class > > that mixes it in. It'd be super cool to be able to have > > comments_counter added in by it: > > > class Commentable: > > comments_counter = db.IntegerProperty(required=True, default=0) > > > # Various method definitions excluded for brevity... > > > class Post(db.Model, Commentable): > > title = db.StringProperty(required=True) > > body = db.TextProperty(required=True) > > added = db.DateProperty(auto_add_now=True) > > # comments_counter = db.IntegerProperty(required=True, defualt=0) > > # Now, comments_counter is included by Commentable mixin > > > I gave something like this a try last night, and it didn't seem to > > work, so I figured that I'd ask before going too-deeply down a rabbit > > hole. > > > If this won't work, I think that it'd be super cool. It would enable > > a wide range of work-and-time saving plugins, such as in the Ruby on > > Rails ecosystem. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to google-appengine@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en -~----------~----~----~----~------~----~------~--~---