get_or_create () - это просто вспомогательная функция, так что нет ничего плохого в том, чтобы писать свои собственные, как показал pavid или
result = Model.objects.filter(field__lookup=value)[0]
if not result:
result = Model.objects.create(...)
return result
EDIT
Как и предполагалось, изменил срез [: 1] (который возвращает список с одной записью) после фильтра на [0] (который возвращает реальный объект). Проблема в том, что это вызовет исключение, если нет совпадения с запросом.
Это также вызовет симлиарное исключение:
Model.objects.filter(field_lookup=value).latest()
Глядя на вопрос еще раз, я не уверен, что исходный плакат пытается вернуть несколько объектов / строк, или это просто способ обойти возникновение исключения при извлечении одного объекта / строки.
Вот еще один вариант?
results = Model.objects.filter(...)
if results.exists():
return results
else:
return Model.objects.create(...)
и еще:
result = None
try:
result = Model.objects.get(...)
except Model.DoesNotExist:
result = Model.objects.create(...)
Нет ничего плохого в том, чтобы вызывать и ловить исключения!