Как я могу проверить, что название общества содержит название города или населенного пункта и обновить название общества?
В моей базе данных есть данные об обществах, но некоторые общества содержат названия городов и населенных пунктов. Я хочу проверить, содержит ли название общества название города и населенного пункта, и удалить их или обновить название общества.
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