Как я могу проверить, что название общества содержит название города или населенного пункта и обновить название общества?

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

models\locality.py

class Society(models.Model):
    name = models.CharField(max_length=255, blank=True, null=True)
    created_at = models.DateTimeField(db_column='createdAt', auto_now_add=True)  # Field name made lowercase.
    updated_at = models.DateTimeField(db_column='updatedAt', auto_now=True)  # Field name made lowercase.
    locality = models.ForeignKey('Locality', models.DO_NOTHING, db_column='localityId', blank=True, null=True, related_name='society_set')  # Field name made lowercase.
    dot_com_database_id = models.IntegerField(db_column='dotComDatabaseId', blank=True, null=True)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'societies'

models\society.py

class Locality(models.Model):
    name = models.CharField(max_length=255, blank=True, null=True)
    created_at = models.DateTimeField(db_column='createdAt', auto_now_add=True)  # Field name made lowercase.
    updated_at = models.DateTimeField(db_column='updatedAt', auto_now=True)  # Field name made lowercase.
    city = models.ForeignKey('City', models.DO_NOTHING, db_column='cityId', blank=True, null=True, related_name='locality_set')  # Field name made lowercase.
    connect_database_id = models.IntegerField(db_column='connectDatabaseId', blank=True, null=True)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'localities'

Это развеет ваши сомнения: Пройдитесь по обществам, у которых есть имена, и по каждому обществу. Если проблема добавления города & населенного пункта существует для общества. Удалите название города и населенного пункта из названия общества и обновите название общества.
. например,
. Название общества в базе данных: Lodha Downtown Dombivli East Thane

В приведенном выше примере название общества - 'Loadha Downtown', но оно также содержит название населенного пункта 'Dombivli East' и название города 'Thane'.

Как проверить, что имя общества содержит название города или населенного пункта через цикл или любую итерацию?

Пожалуйста, помогите мне! Спасибо.

Проверьте, содержит ли имя какого-либо общества подстроку, которая является именем населенного пункта, используя values_list()

для проверки содержит ли он, мы будем использовать icontains и пройдемся по каждому locality_names_list с помощью reduce функции python

from functools import reduce
import operator
from django.db.models import Q

locality_names_list = list(Locality.objects. values_list('name', flat=True)
society_names_contain_locality = Society.objects.filter(reduce(operator.and_, (Q(name__icontains=name) for name in locality_names_list)))
print(society_names_contain_locality) 

society_names_contain_locality возвращает список общества, который вы хотите, вы можете итерацией обновить или удалить.

для обновления вы можете использовать update() или save():

for society in society_names_contain_locality:
    society.update(name="???") #or society.delete() if delete

или если вы хотите обрабатывать их все одновременно только с 1 значением:

society_names_contain_locality.update(name="???")
society_names_contain_locality.delete() #warn: this delete all of them
Вернуться на верх