Thanks. I'll follow up at discussions.

On Tuesday, November 9, 2021 at 5:56:52 PM UTC+4 Mike Bayer wrote:

> note we are following up w/ this question at discussions:  
> https://github.com/sqlalchemy/sqlalchemy/discussions/7303
>
> On Mon, Nov 8, 2021, at 6:07 AM, Shefeek Najeeb wrote:
>
> 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+...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy/212bff82-4d99-4d77-a7a2-0968dcae15a1n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/sqlalchemy/212bff82-4d99-4d77-a7a2-0968dcae15a1n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>
>

-- 
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/84b2da14-761e-41f8-a4f0-bbe51ad03e52n%40googlegroups.com.

Reply via email to