Мы не можем сделать это с одним 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(…)
:
# <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'
, поэтому не исключено, что вы получите нежелательные совпадения.