here is my model.py from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, Table from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, relationship from enum import Enum as PyEnum SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db" engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) Base = declarative_base() class Gender(PyEnum): male = "male" female = "female" class Role(PyEnum): admin = "admin" student = "student" user_roles = Table( "user_roles", Base.metadata, Column("user_id", Integer, ForeignKey("users.id"), primary_key=True), Column("role_id", Integer, ForeignKey("roles.id"), primary_key=True),) class RoleTable(Base): __tablename__ = "roles" id = Column(Integer, primary_key=True, index=True) name = Column(String, unique=True, nullable=False) # ✅ Store as a string instead of Enum # Many-to-Many relationship with User users = relationship("User", secondary=user_roles, back_populates="roles") class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) first_name = Column(String, nullable=False) middle_name = Column(String, nullable=True) last_name = Column(String, nullable=False) email = Column(String, unique=True, index=True, nullable=False) password = Column(String, nullable=False) gender = Column(String, nullable=False) # ✅ Store gender as a string roles = relationship("RoleTable", secondary=user_roles, back_populates="users") # ✅ Fix relationship Base.metadata.create_all(bind=engine) I received this error and i do not know what to do since am still learning backend with fastapi: File "C:\Users\flex zone\venv\lib\site-packages\sqlalchemy\orm\unitofwork.py", line 63, in append item_state = attributes.instance_state(item) AttributeError: 'str' object has no attribute '_sa_instance_state' here is my schema.py code from my project from pydantic import BaseModel, EmailStr from typing import List, Optional from enum import Enum class Gender(str, Enum): male = "male" female = "female" class Role(str, Enum): admin = "admin" student = "student" class UserBase(BaseModel): first_name: str middle_name: Optional[str] = None last_name: str email: EmailStr password: str gender: Gender roles: List[str] # ✅ Expect List of role names (not RoleTable) class Config: orm_mode = True class UserResponse(UserBase): id: int class UserCreate(UserBase): pass route.py from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from database import SessionLocal from models.user_model import User, RoleTable from schemas.user_schema import UserCreate, UserResponse from typing import List router = APIRouter() def get_db(): db = SessionLocal() try: yield db finally: db.close() router.post("/", response_model=UserResponse) def create_user(user: UserCreate, db: Session = Depends(get_db)): # Check if email already exists existing_user = db.query(User).filter(User.email == user.email).first() if existing_user: raise HTTPException(status_code=400, detail="Email already registered") # ✅ Convert role names (strings) into RoleTable instances role_objects = db.query(RoleTable).filter(RoleTable.name.in_(user.roles)).all() if len(role_objects) != len(user.roles): # Make sure all roles are valid raise HTTPException(status_code=400, detail="One or more invalid roles provided") # ✅ Create user object and assign roles (as RoleTable instances) new_user = User( first_name=user.first_name, middle_name=user.middle_name, last_name=user.last_name, email=user.email, password=user.password, # Hash this in real apps gender=user.gender, roles=role_objects # Store as RoleTable objects ) # ✅ Save to database db.add(new_user) db.commit() db.refresh(new_user) # ✅ Convert RoleTable objects to strings for response new_user_roles = [role.name for role in new_user.roles] # Just use role.name as it's already a string # Manually update the roles before returning new_user.roles = new_user_roles return new_user am working with PyCharm and am i a young developer still learning i received error when try to create a new post from the browser Continue reading...