Những gì bạn đang thấy là hành vi chính xác.
get_or_create là viết tắt của 'get and return the object khớp với kwargs , nếu nó không tồn tại, hãy tạo nó bằng defaults '. Tra cứu của bạn đang tìm kiếm một đối tượng có name là một đối sánh không phân biệt chữ hoa chữ thường với 'cedar' . Đối tượng đó tồn tại, vì vậy nó được trả về. Không hơn không kém.
Bây giờ nếu không có kết quả phù hợp, Stéphane đúng, và bạn cần chỉ định name trong defaults tham số. Tất cả các tra cứu có chứa dấu phân tách tra cứu __ bị loại bỏ khỏi các tham số được chuyển đến create() .