Абстрактен базов модел на Flask-SQLAlchemy

В моето приложение Flask-SQLAlchemy искам да добавя няколко полета (създадени(от|на), променени(от|на)) към всеки модел/таблица

моят код в момента

from .. import db


class Brand(db.Model):
    __tablename__ = 'md_brands'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True, nullable=False)

    def __repr__(self):
        return u'<Brand {}>'.format(self.name)

Не съм сигурен дали е по-добре да използвам Mixins или по някакъв начин да разширя базовия db.Model (или дори има по-добър начин да направите това).

Кой (и защо) е най-добрият начин за добавяне на такива полета (създадени(от|на), променени(от|на)) към всички мои модели?


person Daniel Kreiseder    schedule 31.07.2014    source източник
comment
Възможен дубликат на flask sqlalchemy: как да декларирам базов клас   -  person pydsigner    schedule 30.07.2016


Отговори (2)


И двете са почти еднакви. Ето един Mixin, който използвам

  class ModelMixin(object):
      def __repr__(self):
          return unicode(self.__dict__)

      @property
      def public_view(self):
          """return dict without private fields like password"""
          return model_to_dict(self, self.__class__)  

и тогава

class User(db.Model, ModelMixin):
      """ attributes with _  are not exposed with public_view """
      __tablename__ = "users"
      id = db.Column(db.Integer, primary_key=True)
person Lukasz Madon    schedule 31.07.2014

Използване на __abstract__.

Как да декларирам клас на базов модел във Flask-SQLAlchemy?

from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)

class Base(db.Model):
    __abstract__ = True

    created_on = db.Column(db.DateTime, default=db.func.now())
    updated_on = db.Column(db.DateTime, default=db.func.now(), onupdate=db.func.now())


class User(Base):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key = True)
    email = db.Column(db.String(255), unique = True)
person yan    schedule 02.02.2016