Hi all,

It has been only a while since I've started tinkering with SQLAlchemy. I 
aws working on a particular requirement of mine, where I had 4 types of 
users with login functionality. But each type has different attributes.
The user types are : Client, Brand, Merchant, Customer. All these types 
were supposed to have login access  to the system. I created a parent model 
called User and other models like Client, Brand, Merchant and Customer 
inherits from the User model. I implemented it using joined table 
inheritance as per the documentation.

============================================================
*# User Model*
class User(UserMixin, BaseModel):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True, autoincrement=True, unique=True)
    email = Column(String, unique=True, nullable=False, index=True)
    confirmed = Column(Boolean, default=False, nullable=False)
    role = Column(Enum(Role))
    __mapper_args__ = {
        "polymorphic_on": role,
    }
=============================================================
*# Client Model*
class Client(User):
    __tablename__ = "clients"
    id = Column(Integer, ForeignKey("users.id"), primary_key=True)
    __mapper_args__ = {
        "polymorphic_identity": "client",
        'inherit_condition': (id == User.id)
    }
    client_data = (...)
    .....
================================================================
*# Brand Model*
class Brand(User):
    __tablename__ = "brands"
    id = Column(Integer, ForeignKey("users.id"), primary_key=True)
    __mapper_args__ = {
        "polymorphic_identity": "brand",
        'inherit_condition': id == User.id
    }
    brand_data = (...)
    .....

Then I created an User object, which is to serve as the admin user. It 
works fine and well.
But the problem is when I'm creating other user types. For eg: when I'm 
creating a Client object, a row is created in the Client table as well as 
the User table. I am able to login with the client user. But  the problem 
is when I'm trying to access the Client object's attributes. And the object 
type returned while querying the Client is of type User.

>>> from src.models.models import User
>>> User.get_all()
[<User 63: xxxxxxx>, <User 7: xxxxxxx>, <User 67: xxxxxxxx>, <User 13: 
xxxxxxxx>, <User 69: xxxxxxxxx>, <User 72: xxxxxxxx>]
>>> from src.models.models import Client
>>> 
>>> Client.get_all()
[<User 7: xxxxxx>, <User 67: xxxxxxx>, <User 69: xxxxxx>]
>>> 

But if I'm making the query on Client object before loading the User, it 
returns fine.

>>> from src.models.models import Client
>>> Client.get_all()
[<Client xxxxx>, <Client xxxxxxx>, <Client xxxxxx>]
>>> 

I feel like I'm missing out on something?

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/212bff82-4d99-4d77-a7a2-0968dcae15a1n%40googlegroups.com.

Reply via email to