Django-在.update()中执行复杂的操作
我有以下型号:Django-在.update()中执行复杂的操作,django,django-models,Django,Django Models,我有以下型号: class Address(models.Model): full_address = models.CharField(max_length=100) 一些完整地址以“Region”结尾。示例: 约克地区马克姆大街123号 皮尔地区米西索加布鲁尔街1号 我想从任何以“Region”结尾的full\u address字段中删除“Region” 这里有一个可能的解决方案,但速度很慢,因为您需要逐个检查每个地址: for i in Address.objects.filte
class Address(models.Model):
full_address = models.CharField(max_length=100)
一些完整地址
以“Region”结尾。示例:
full\u address
字段中删除“Region”
这里有一个可能的解决方案,但速度很慢,因为您需要逐个检查每个地址:
for i in Address.objects.filter(full_address__endswith=' Region'):
i.full_address = i.full_address[:-7]
i.save()
是否有某种方法可以使用Address.objects.update()
实现上述功能?您可以在此处使用
请注意,如果您认为可以得到一个包含文本“Region”
以及以该字符串结尾的字符串,那么这将用空字符串替换这两个字符串。这似乎不太可能,但如果您想特别小心,可以使用regexp\u replace
而不是replace
,并对第一个值使用适当的表达式(即值('Region$)
),以确保只匹配要替换的一个零件。您可以在此处使用
请注意,如果您认为可以得到一个包含文本“Region”
以及以该字符串结尾的字符串,那么这将用空字符串替换这两个字符串。这似乎不太可能,但如果您想特别小心,可以使用regexp\u replace
而不是replace
,并对第一个值使用适当的表达式(即值('Region$)
)确保您只匹配要更换的一个零件。是的,我必须使用regexp\u replace
,因为“Region”
可能以类似“Regional Road 25”的形式出现在街道名称中。
是的,我必须使用regexp\u replace
,因为'Region'
可能以类似'Regional Road 25'
from django.db.models import F, Func, Value
Address.objects.filter(full_address__endswith=' Region').update(
full_address=Func(
F('full_address'),
Value(' Region'), Value(''),
function='replace',
)
)