Форум сайта python.su
try: obj = Models.objects.filter(id=1)[0] except IndexError: obj = ''
obj = Models.objects.filter(id=1) if obj.exists(): obj = obj[0] else: obj = ''
Офлайн
А почему не
try: obj = Models.objects.get(id=1) except KakoyTamError: obj = ''
Офлайн
тогда так.
try: obj = Models.objects.get(id=1) except KakoyTamError: obj = ''
try: obj = Models.objects.filter(id=1)[0] except IndexError: obj = ''
obj = Models.objects.filter(id=1) if obj.exists(): obj = obj[0] else: obj = ''
Отредактировано ilnur (Апрель 30, 2013 10:21:46)
Офлайн
Еще вариант написать менеджер, который будет возвращать объект по id или пустую строку
class SilentQuerySet(models.query.QuerySet): """ Обычный QuerySet get возвращает None, если объект не найден, вызывает исключение MultipleRecordReturned если найдено несколько get_one возвращает None если объект не найден или первый, если найдено несколько get_loud - вызывает исключение DoesNotExists если объект не найден, вызывает исключение MultipleRecordReturned если найдено несколько """ def get(self, *args, **kwargs): try: return super(SilentQuerySet, self).get(*args, **kwargs) except self.model.DoesNotExist: return None def get_one(self, *args, **kwargs): clone = self.filter(*args, **kwargs)[:1] return clone.get() def get_loud(self, *args, **kwargs): return super(SilentQuerySet, self).get(*args, **kwargs) class SilentManager(models.Manager): """ Обычный Manager использующий SilentQuerySet вместо QuerySet """ use_for_related_fields = True def get_query_set(self): return SilentQuerySet(self.model, using=self._db) def get_one(self, *args, **kwargs): return self.get_query_set().get_one(*args, **kwargs) def get_loud(self, *args, **kwargs): return self.get_query_set().get_loud(*args, **kwargs)
Офлайн
да. Придумать можно много наверное.
Но что из мной предложенныз в 3 посте. Лучше использовать? У кого какие +/-?
Офлайн
Однострочник
obj = next(Models.objects.filter(id=1)[:1].iterator(), '')
ilnurА нужен первый объект или единственный? С единственным я бы get()/DoesNotExist использовал.
Но что из мной предложенныз в 3 посте. Лучше использовать? У кого какие +/-?
Отредактировано reclosedev (Апрель 30, 2013 16:46:11)
Офлайн
obj = Models.objects.filter(id=1) obj = obj[0] if obj.exists() else ''
Офлайн