You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I’m encountering an error when trying to define and use relationships between my Orders and Users models using SQLModel. The error occurs when I attempt to create an order with a relationship to a user. The error message is: sqlalchemy.exc.InvalidRequestError: Mapper 'Mapper[Users(users)]' has no property 'user'.
I’ve verified that the database tables are created correctly, and the relationships seem to be defined properly. However, SQLAlchemy is unable to resolve the user property in the Users model at runtime.
Code Snippets:
orders.py
import uuid
from decimal import Decimal
from enum import Enum
from typing import TYPE_CHECKING, Optional, List
from sqlmodel import Field, SQLModel, Relationship
from backend.app.models._base import TimeStampMixin
if TYPE_CHECKING:
from backend.app.models.users import Users
from backend.app.models.order_items import OrderItem
class OrderStatus(str, Enum):
PENDING = "pending"
SHIPPED = "shipped"
DELIVERED = "delivered"
CANCELLED = "cancelled"
class OrdersBase(TimeStampMixin):
user_id: uuid.UUID = Field(foreign_key="users.id", ondelete="CASCADE")
total_amount: Decimal = Field(ge=1, decimal_places=2)
status: OrderStatus = Field(default=OrderStatus.PENDING)
class OrdersCreate(OrdersBase):
pass
class OrdersPublic(OrdersBase):
id: uuid.UUID
class OrdersUpdate(SQLModel):
total_amount: Decimal | None = None
status: OrderStatus | None = None
class Orders(OrdersBase, table=True):
id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True, index=True)
##relationship M-1
user: Optional["Users"] = Relationship(back_populates="orders")
order_items: List["OrderItem"] = Relationship(back_populates="order", cascade_delete=True, passive_deletes=True)
users.py
import uuid
from enum import Enum
from typing import TYPE_CHECKING, List
from pydantic import EmailStr
from sqlmodel import SQLModel, Field, Relationship
from backend.app.models._base import TimeStampMixin
if TYPE_CHECKING:
from backend.app.models.orders import Orders
from backend.app.models.cart import Cart
from backend.app.models.addresses import Address
from backend.app.models.reviews import Review
from backend.app.models.wishlist import Wishlist
class UserRole(str, Enum):
USER = "user"
ADMIN = "admin"
class UsersBase(TimeStampMixin):
username: str = Field(index=True, min_length=4)
email: EmailStr
role: UserRole
class UsersCreate(UsersBase):
password: str = Field(min_length=8)
class UsersUpdate(SQLModel):
username: str | None = None
password: str | None = None
email: EmailStr | None = None
role: UserRole | None = None
class UsersPublic(UsersBase):
id: uuid.UUID
class Users(UsersBase, table=True):
id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True, index=True)
hashed_password: str
##relationships 1-M
orders: List["Orders"] = Relationship(back_populates="user", cascade_delete=True, passive_deletes=True)
carts: List["Cart"] = Relationship(back_populates="user", cascade_delete=True, passive_deletes=True)
reviews: List["Review"] = Relationship(back_populates="user", passive_deletes=True)
wishlists: List["Wishlist"] = Relationship(back_populates="user", cascade_delete=True, passive_deletes=True)
addresses: List["Address"] = Relationship(back_populates="user", cascade_delete=True, passive_deletes=True)
orders.py from services package
from sqlmodel import Session
from backend.app.core.db import engine
from backend.app.models.orders import Orders, OrdersCreate
def add_order(order_data: OrdersCreate):
with Session(engine) as session:
order_db = Orders.model_validate(order_data)
session.add(order_db)
session.commit()
session.refresh(order_db)
print(order_db)
add_order({
"total_amount": 2000,
"status": "PENDING"
})
gives an error on order_db = Orders.model_validate(order_data)
"
error message "sqlalchemy.exc.InvalidRequestError: Mapper 'Mapper[Users(users)]' has no property 'user'. If this property was indicated from other mappers or configure events, ensure registry.configure() has been called.
"
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
First Check
Commit to Help
Example Code
Description
I’m encountering an error when trying to define and use relationships between my Orders and Users models using SQLModel. The error occurs when I attempt to create an order with a relationship to a user. The error message is:
sqlalchemy.exc.InvalidRequestError: Mapper 'Mapper[Users(users)]' has no property 'user'.
I’ve verified that the database tables are created correctly, and the relationships seem to be defined properly. However, SQLAlchemy is unable to resolve the user property in the Users model at runtime.
Code Snippets:
orders.py
users.py
orders.py from services package
gives an error on order_db = Orders.model_validate(order_data)
"
error message "sqlalchemy.exc.InvalidRequestError: Mapper 'Mapper[Users(users)]' has no property 'user'. If this property was indicated from other mappers or configure events, ensure registry.configure() has been called.
"
Operating System
Windows
Operating System Details
No response
SQLModel Version
0.0.22
Python Version
3.12.8
Additional Context
No response
Beta Was this translation helpful? Give feedback.
All reactions