Wat je ziet is het juiste gedrag.
get_or_create is een afkorting voor 'het object ophalen en retourneren dat overeenkomt met kwargs , als het niet bestaat, maak het dan aan met defaults '. Uw zoekopdracht is op zoek naar een object waar name is een hoofdletterongevoelige overeenkomst met 'cedar' . Dat object bestaat, dus wordt het geretourneerd. Niets meer, niets minder.
Als er nu geen match was, heeft Stéphane gelijk, en zou je name moeten specificeren in de defaults parameter. Alle zoekopdrachten met het opzoekscheidingsteken __ worden ontdaan van de parameters die zijn doorgegeven aan create() .