Как проверить наличие подстроки в методе Django update_or_create ()? - PullRequest
1 голос
/ 26 мая 2020

Допустим, у меня есть следующий объект, который я хочу sh добавить в свою базу данных, используя соответствующую модель:

Object

{

'object_name': 'Foo',
'value': 100,00

}

и хочу обновить value из Foo Bar в базе данных .

Как заставить Django проверять, является ли Foo подстрокой объекта базы данных (в данном случае Foo Bar), чтобы избежать дублирования?

obj, created = foo_model.objects.update_or_create(
                    object_name=object_name,
                    defaults={
                        'value': value,
                    }
                )

(так что цель заключается в обновлении значения объекта Foo Bar вместо создания нового объекта Foo, поскольку это подстрока уже существующего объекта).

1 Ответ

1 голос
/ 26 мая 2020

Мы не можем сделать это с одним update_or_create. Мы можем выполнить update_or_create, который также изменит object_name в случае совпадения, например, с:

# changes the object_name of the object if it <i>already exists</i>
obj, created = foo_model.objects.update_or_create(
    object_name__contains=object_name,
    defaults={
        'name': object_name
        'value': value,
    }
)

, но мы можем исправить это, написав нашу собственную функцию с .get_or_create(&hellip;):

# <i>does not</I> change the object_name of the object if it already exists
obj, created = foo_model.objects.get_or_create(
    object_name__contains=object_name,
    defaults={
        'name': object_name
        'value': value,
    }
)
if not created:
    obj.value = value
    obj<b>.save()</b>

Итак, здесь мы обновляем value элемента, если он уже существует.

Это как уже было сказано, я не уверен, что это хороший подход. Похоже, вы стремитесь решить основную проблему путем сопоставления. Но возможно, что хотя совпадение и есть, это ложное срабатывание . Ведь для object_name со значением '123456789' уже есть шесть совпадений со строкой из четырех символов: '1234', '2345', '3456', '4567', '5678' , и '6789', поэтому не исключено, что вы получите нежелательные совпадения.

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