Closed alex-msk closed 2 years ago
Сори за долгий ответ, круто что кто то пользуется pyamogen ))
Нашли ли как решить такую проблему ? Пока никакого воркэраунда нет для решения данной проблемы, я наивно думал что нужен всегда конкретный телефон.
Я пока закинул меррж реквест https://github.com/Krukov/amocrm_api/pull/46 - может он поможет как-то. Суть в том что можно будет передать enums=ALL и получить все номера.
Мне сейчас не на чем проверить реализацию - если будет возможность скопировать и проверить буду благодарен
Pyamogen очень удобен.
Пока что создал кучу полей с телефонами с разными значениями enum=. Но чувствую, что какая то часть телефонов и имейлов проходит мимо меня, особенно в случаях когда у контакта указано, к примеру, несколько рабочих телефонов или e-mail'ов.
А так как те, кто вносит информацию в CRM не особо заморачивается над выборрм тира телефона(оставляя это поле по-умолчанию), есть ощущение, что через библиотеку не вижу многого.
Попробую протестить с этим обновлением. По итогу напишу.
Перестало работать то, что было написано ранее.
Сделал как то так:
class Contact(_Contact):
dolzhnost = custom_field.TextCustomField("Должность", field_id=495999, code="POSITION")
# Номера телефонов
phone_personal = custom_field.ContactPhoneField("Телефон", field_id=496001, code="PHONE", enum_code="PRIV")
phone_work = custom_field.ContactPhoneField("Телефон", field_id=496001, code="PHONE", enum_code="WORK")
phone_other = custom_field.ContactPhoneField("Телефон", field_id=496001, code="PHONE", enum_code="OTHER")
allphones = custom_field.ContactPhoneField("Телефоны", code="PHONE", enums="ALL")
потом
c=Contact.objects.get(object_id=id)
print(c.phone_personal)
print(c.allphones)
В итоге получаю:
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/celery/app/trace.py", line 412, in trace_task
R = retval = fun(*args, **kwargs)
File "/usr/local/lib/python3.9/site-packages/celery/app/trace.py", line 704, in __protected_call__
return self.run(*args, **kwargs)
File "/app/amo/tasks.py", line 27, in sync_contact
print(c.phone_personal)
File "/usr/local/lib/python3.9/site-packages/amocrm/v2/fields.py", line 35, in __get__
return self.on_get_instance(instance, data)
File "/usr/local/lib/python3.9/site-packages/amocrm/v2/entity/custom_field.py", line 119, in on_get_instance
return self.on_get(field_data["values"])
File "/usr/local/lib/python3.9/site-packages/amocrm/v2/entity/custom_field.py", line 268, in on_get
return result[0]
IndexError: list index out of range
А раньше этот код работал (по крайней мере print(c.phone_personal) )
Может что то не так делаю?
Понял. Такое появляется если в поле с телефоном ничего не указано(раньше просто возвращался None). Если в поле что то указано, то все работает штатно.
У меня что-то ни одно кастомное поле получить не удалось. Везде выдает AttributeError, хотя models.py сгенерирвоал, все ок
@bkmz А можешь полный трейсбек скинуть?
@Krukov Начал смотреть Trace и понял, что я неправильно заимпортировал models.py.. Спасибо :)
было
import models
стало
from models import Contact
Добавил pull request. Не уверен, что сделал все правильно(вижу, что есть type=MULTITEXT, по названию, вроде, предполагает изменения на более глубоком уровне, но не разобрался где)
В модели написано что то вроде
telefon = custom_field.ContactPhoneField("Телефон", field_id=496001, code="PHONE")
Модель сгенерирована через pyamogenПри обращении к contact.telefon, возвращается строка, которая содержит только один номер телефона.
Как получить ВСЕ номера телефонов, которые привязаны к карточке(рабочие, мобильные, личные)? Как быть если, к примеру у контакта несколько рабочих телефонов?