AtributteError "объект не имеет атрибута" - как предотвратить без попытки / кроме - доступ к полю модели - PullRequest
0 голосов
/ 08 января 2019

У меня есть вопрос: (Я работаю над Django 1.8, Python 2.7.15) Я получаю объект из базы данных:

shop_users = ShopUsers.objects.get(pk=_id)

Тогда, если объект существует, я готовлю данные для просмотра:

if shop_users:
    data = {
        'full_name': shop_users.full_name,
        'shop': shop_users.shop.title,
        'price_title': shop_users.price.title if shop_users.price.title else '',
        'package_price': shop_users.price.price,
        'user_price': shop_users.payment.operation_amount
    }

Но есть вероятность, что shop_users.price.title не будет существовать.

Я хотел бы проверить это правильно, пока я готовлю данные, как описано выше (я делаю '... if ... else'), но если shop_users.price.title не существует, он предоставляет AttributeError.

Я могу использовать try / кроме перед объявлением 'data', но это удвоит мой код ...

Есть ли хитрость для обработки AttributeError с помощью (... if ... else)?

Возможно shop_users.price.title [0] (не работает)

или получить (shop_users.price.title)?

Я просто не хочу удваивать свой код ... но я не знаю никакого трюка для этого: /

Я младший. Я ценю любую помощь!

1 Ответ

0 голосов
/ 08 января 2019

getattr именно то, что вы ищете.

Попробуйте вместо 'shop': shop_users.shop.title:

'shop': getattr(shop_users.shop,'title', None)

в соответствии с getattr документ:

getattr (объект, имя [, по умолчанию]) -> значение

Получить именованный атрибут из объекта; getattr (x, 'y') эквивалентно x.y. Когда задан аргумент по умолчанию, он возвращается, когда атрибут не существовать; без этого в этом случае возникает исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...