Noah McIlraith
Noah McIlraith

Reputation: 14292

Set a kind name independently of the model name (App Engine datastore)

As a Python programmer, I like my code to be reusable, I'm trying to avoid kind name conflicts in my code (where two different models share the same kind name).

Currently I just prepend some meaningful text to the model's class name, but this is awfully unpythonic.

Being able to explicitly set the model's kind will solve my problem, but I can't find out how to do this, does anyone know how?

Upvotes: 3

Views: 443

Answers (1)

Nick Johnson
Nick Johnson

Reputation: 101139

Just override the kind() method of your class:

class MyModel(db.Model):
  @classmethod
  def kind(cls):
    return 'prefix_%s' % super(MyModel, cls).kind()

You can define a custom baseclass that does this for you:

class ModuleModel(db.Model):
  @classmethod
  def kind(cls):
    return '%s_%s' % (cls.__module__, super(ModuleModel, cls).kind())

Any class that extends ModuleModel will have the name of the module it's defined in prefixed to the kind name.

Upvotes: 10

Related Questions