fbpx

Ошибка: ValueError: Cannot assign «(, True)»: «Call.client» must be a «Client» instance.

696 просмотраdjango-orm foreign-key
0
0 Комментариев

Здравствуйте!
Похожая ошибка встречалась на данном форуме, я вроде сделал ,как в рекомендации, но все-равно не работает.
model.py

class Client(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    phone_number = models.CharField(max_length=12, verbose_name='Номер телефона с которого звонили')
    surname = models.CharField(max_length=30, verbose_name='Фамилия клиента')
    name = models.CharField(max_length=30, verbose_name='Имя клиента')
    patronymic = models.CharField(max_length=30, verbose_name='Отчество клиента')
 class Call(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    date_call = models.DateTimeField(verbose_name='Время звонка')
    call_duration = models.CharField(max_length=20, verbose_name='Длительность звонка')
    client = models.ForeignKey(Client, on_delete=models.CASCADE, blank=True, null=True)


Пытаюсь записать данные полученные с asterisk:

...
option_call = convert_unique_id(active_call['level 14'])
dst_phone = active_call['Caller ID']
src_phone = active_call['Connected Line ID']
Call.objects.create(
                        client = Client.objects.get_or_create(phone_number=src_phone),
                        unique_id = option_call,
                        dst_phone_number = dst_phone,
                        )


Данные в таблицу Client записываются, но при создании записи Call, возникает ошибка:

raceback (most recent call last):
  File "get_activ_call.py", line 104, in <module>
    get_activ_call()
  File "get_activ_call.py", line 86, in get_activ_call
    dst_phone_number = dst_phone,
  File "/home/pavel/project/crm/.env/lib/python3.5/site-packages/django/db/models/manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/pavel/project/crm/.env/lib/python3.5/site-packages/django/db/models/query.py", line 415, in create
    obj = self.model(**kwargs)
  File "/home/pavel/project/crm/.env/lib/python3.5/site-packages/django/db/models/base.py", line 477, in __init__
    _setattr(self, field.name, rel_obj)
  File "/home/pavel/project/crm/.env/lib/python3.5/site-packages/django/db/models/fields/related_descriptors.py", line 197, in __set__
    self.field.remote_field.model._meta.object_name,
ValueError: Cannot assign "(<Client: +79086178731  >, True)": "Call.client" must be a "Client" instance.


Подскажите,пожалуйста, в чем проблема?


Добавить комментарий

1 Ответы

Python Опубликовано 26.04.2019
0
Сергей (анонимный) 0 Comments

get_or_create возвращает два значения
первое инстанс класса второе True | False, True если создано
сначала надо так
client, created = Client.objects.get_or_create(phone_number=src_phone)

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up