bbox1 contains bbox2, but Item.objects.filter(lat_lng__coveredby=Polygon.from_bbox(bbox1)) doesn’t return the item, while Item.objects.filter(lat_lng__coveredby=Polygon.from_bbox(bbox2)) returns it.
Further research shows that this looks like it is more a PostgreSQL / postgis issue than Django. I ran the queries directly in psql and got the same results.
Ok, this all makes sense now. With geography = True, it’s calculating a great-circle route instead of a cartesian path.
I plotted the “southern” line boundary of bbox1 and bbox2 on Google Earth along with your designated point in Tulsa, Ok, and yes, those two lines are on each side of the designated point.
(I’m not used to working with bounding boxes being large enough for the difference to be significant. I don’t think I ever work with a square larger than 1 km on a side.)