Django - как обработать поиск, возвращающий ноль строк - PullRequest
0 голосов
/ 23 апреля 2011

Какой лучший способ справиться с возвратом 0 записей
из базы данных поиска?

У меня есть объект UserDetails (таблица) с внешним
ключ к объекту пользователя django по умолчанию (таблица)

Как обращаться с пользователями, у которых еще нет
строка / записи в объекте UserDetails (таблица)?

Если я сделаю этот поиск для пользователя с нулевым значением
строк в таблице UserDetails я получаю эту ошибку:

IndexError at / my-page /

индекс списка вне диапазона

@login_required
def my_page(request):
    """ A function to render My Page
    """

    user_details = UserDetails.objects.filter(id=2)[0]

    # Return rendered HTML
    return render_to_response('my_page.html', RequestContext(request,
                                                             {
                                                              'city_town': user_details.city_town,
                                                              'state_province': user_details.state_province,
                                                              }))
# end def

1 Ответ

2 голосов
/ 23 апреля 2011

То, что вы хотите сделать, это получить информацию о пользователе или вернуть None, чтобы ваш шаблон мог отобразить соответствующую вещь.Вы делаете это, перехватывая ошибку, пытаясь получить отдельный объект, и устанавливая переменную в None, если она не срабатывает.

try:
    user_details = UserDetails.objects.get(id=2)
except UserDetails.DoesNotExist:
    user_details = None

# the rest of your code

Затем обрабатываете значение None в вашем шаблоне:

# template
{% if user_details %}
    # render details
{% else %}
    # render form inputs
{% endif %}
...