The real issue is in the game's DLL, to which we have no access. The lua file that creates the user-interface for placing a district querries the game's DLL source-code for whether or not a district can be placed at plot "X", and only those plots that are returned as being valid from the game's DLL source-code are shown in the interface as being valid spots for the District.
The solution I think other people have used is to make all resources harvestable, and to harvest the resource before placing the district -- but the AI does not really understand this, and even this method of work-around has its own issues.