1. 13 Aug, 2013 2 commits
    • Serge S. Koval's avatar
      Merge pull request #280 from sumpfgottheit/sqla_inheritance_primary_key · 6ddbfc79
      Serge S. Koval authored
      process inherited primary keys correctly
      6ddbfc79
    • Florian Sachs's avatar
      Reuseable functions for handling of inherited pks · 1e8520da
      Florian Sachs authored
      Two new functions on `contrib.sql.tools`:
      
        - `is_inherited_primary_key(prop)` : Returns True if the `ColumnProperty` **prop** is an inherited primary key. Occuring Exceptions are not handled but raised. *Should* work with arbitrary levels of inheritance.
        - `get_column_for_current_model(prop)` : Return the `Column` that belongs to the model of the `ColumnProperty` **prop**. So if the ColumnProperty is for the parent, the Column for the parent ist returned. If the ColumnProperty if for the Child, the Column for the child is returned. Works with arbitrary levels of inheritance.
      
      `AdminModelConverter.convert()`  and `ModelView.scaffold_list_columns()` are adapted to use the new functions.
      1e8520da
  2. 12 Aug, 2013 1 commit
    • Florian Sachs's avatar
      process inherited primary keys correctely · 3d897ee8
      Florian Sachs authored
      When using joined table inheritance (http://docs.sqlalchemy.org/en/latest/orm/inheritance.html), it is common practice to name the pk-property the same like the pk-property of the parent. The child-property ist a pk itself and has a foreign-key relationship to the pk-property of the parent.
      
      Example:
      
          class BaseWahl(Model):
              __tablename__ = 'basewahlen'
      
              id = Column(Integer, primary_key=True, autoincrement=True)
              discriminator = db.Column(db.String(50))
      
              __mapper_args__ = {
              'polymorphic_identity':'basewahl',
              'polymorphic_on': discriminator
              }
      
          class Wahl(BaseWahl):
              __tablename__ = 'wahlen'
      
              id = Column(Integer, ForeignKey('basewahlen.id'), primary_key=True)
              __mapper_args__ = {
                  'polymorphic_identity':'wahl',
              }
      
      `AdminModelConverter.convert()` does not allow Properties with multiple columns, but will raise a `TypeError`. I changed it into the following way:
      
      - If
        - more than 1 column for the property
        - all columns are primary keys
        - only *one* does not have a Foreign key
        - only one column corresponds to the current model
      - select the column, that corresponds to the current model
      
      I applied the same code to `ModelView.scaffold_list_columns()` and extended it, the primary key in this special constellation actually is *not* ignored, even if it has a foreign key property, so it can be displayed using `column_display_pk = True`.
      
      This solution actually works for me. I do not have enough insight into *Flask-Admin* and definitely even less into *sqlalchemy* to think my solution is the correct one for every situation, but it may be something to think about.
      3d897ee8
  3. 07 Aug, 2013 1 commit
  4. 06 Aug, 2013 1 commit
  5. 05 Aug, 2013 12 commits
  6. 04 Aug, 2013 3 commits
  7. 31 Jul, 2013 1 commit
  8. 30 Jul, 2013 3 commits
  9. 28 Jul, 2013 8 commits
  10. 26 Jul, 2013 1 commit
  11. 24 Jul, 2013 2 commits
  12. 23 Jul, 2013 2 commits
  13. 22 Jul, 2013 3 commits