@Kibastus
Начинающий веб-разработчик

Как исправить IndexError at /admin/auth/user/ list index out of range?

Есть 2 модели: customers(которая содержит поле user = m.ForeignKey(User, related_name="customers")) и userAdmin(class UserAdmin(NestedModelAdmin, DjangoUserAdmin)). Я сделал кастомное поле, выводящее для каждого юзера ссылку на их заказы. Код в app/models.py:
def orders_url(self):
return format_html(u"<a href='/admin/order/order/?q={0}'>Orders</a>", self.user.first_name)

Код в модели app/admin/admin_user.py:
from myproject.customer.models import Customer
def orders_url(self, user):
    customer = user.customers.all()[0]
    return customer.orders_url()

Если перейти к списку юзеров с поисковым запросом( к примеру /admin/auth/user/?q=Nick), то все идет хорошо, поле есть, ссылка есть, перенаправляет на список заказов. Но если просто перейти к списку всех пользователей(/admin/auth/user/), то я получаю эту ошибку:IndexError at /admin/auth/user/ list index out of range. В Traceback подсвечивает следующее:
Error during template rendering
In template /home/vagrant/venv/local/lib/python2.7/site-packages/django/contrib/admin/templates/admin/change_list.html, error at line 91
list index out of range
91 {% result_list cl %}

path_to_project/customer/admin/user_admin.py in orders_url
                customer = user.customers.all()[0] 
▼ Local vars
Variable    Value
self       <myproject.customer.admin.user_admin.UserAdmin object at 0xa7e788c>
user       <User: >

Почему пользователь от self пустой? и как это исправить?
  • Вопрос задан
  • 304 просмотра
Решения вопроса 1
@Kibastus Автор вопроса
Начинающий веб-разработчик
Решено при помощи следующего кода:
def orders_url(self, user):
    customers = user.customers.all()
    return format_html(', '.join([customer.orders_url() for customer in customers]))

Теперь все работает без ошибок.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы