-
-
Notifications
You must be signed in to change notification settings - Fork 97
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug
Nullable ForeignKey field does not get updated to null
To Reproduce
Steps to reproduce the behavior:
- Create 2 models, User and Vehicle, User model will have a vehicle foreignKey field which is nullable
class Vehicle(ormar.Model):
class Meta(BaseMeta):
tablename = "vehicles"
id: int = ormar.Integer(primary_key=True)
chasis_no: str = ormar.String(max_length=64, unique=True)
registration_no: str = ormar.String(max_length=64, unique=True)
model: str = ormar.String(max_length=128)
class User(ormar.Model):
class Meta(BaseMeta):
tablename = "users"
id: int = ormar.Integer(primary_key=True)
name: str = ormar.String(max_length=64, unique=True)
vehicle: Vehicle = ormar.ForeignKey(to=Vehicle, nullable=True)
email: str = ormar.String(nullable=True, max_length=100)- Create a Vehicle (via an endpoint exposed)
@app.post("/vehicle")
async def add_vehicle():
vehicle = await Vehicle.objects.create(
chasis_no="12345",
registration_no="56789",
model="Hilux"
)
return vehicle- Create User with vehicle from above step, User gets created fine with vehicle (via an endpoint exposed)
@app.post("/user")
async def add_user(request: AddUserRequest):
vehicle = await Vehicle.objects.get_or_none(id=request.vehicle_id)
user = await User.objects.create(
name=request.name,
vehicle=vehicle,
email=request.email
)
return user- Update User created above, set vehicle=None and email=None (via an endpoint exposed)
@app.post("/del_vehicle_email_from_user")
async def unassign_vehicle_from_user(request: UnassignVehicleRequest):
user = await User.objects.get_or_none(id=request.user_id)
user.vehicle = None
user.email = None
user = await user.update(_columns=["vehicle", "email"])
return user- Open Users table in database and check, Vehicle column which is a foreign-key wont be updated to null but email gets updated to null

Full code of main.py
import uvicorn
from fastapi import FastAPI
from pydantic.main import BaseModel
from db import User, Vehicle, database
app = FastAPI()
@app.on_event("startup")
async def startup():
if not database.is_connected:
await database.connect()
@app.on_event("shutdown")
async def shutdown():
if database.is_connected:
await database.disconnect()
class AddUserRequest(BaseModel):
vehicle_id: int
name: str
email: str
class UnassignVehicleRequest(BaseModel):
user_id: int
@app.post("/vehicle")
async def add_vehicle():
vehicle = await Vehicle.objects.create(
chasis_no="12345",
registration_no="56789",
model="Hilux"
)
return vehicle
@app.post("/user")
async def add_user(request: AddUserRequest):
vehicle = await Vehicle.objects.get_or_none(id=request.vehicle_id)
user = await User.objects.create(
name=request.name,
vehicle=vehicle,
email=request.email
)
return user
@app.post("/del_vehicle_email_from_user")
async def unassign_vehicle_from_user(request: UnassignVehicleRequest):
user = await User.objects.get_or_none(id=request.user_id)
user.vehicle = None
user.email = None
user = await user.update(_columns=["vehicle", "email"])
return user
if __name__ == "__main__":
uvicorn.run(app=app, port=8080, host="127.0.0.1", reload=False)Expected behavior
Nullable foreignkey field should be set to null when updating
Screenshots
Added above
Versions (please complete the following information):
- Database backend used - postgres
- Python version - 3.11
ormar- 0.12.1pydantic- 1.10.4fastapi- 0.104.1
Additional context
Creating a User with vehicle=None works fine(Issue arises only while updating to None)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working

