我有以下模型:
class Address(models.Model):
full_address = models.CharField(max_length=100)
某些full_address
以“ Region”结尾。例子:
我想从任何以其结尾的full_address
字段中删除“区域”。
这是一种可能的解决方案,但是它很慢,因为您需要一个一个地遍历每个Address
:
for i in Address.objects.filter(full_address__endswith=' Region'):
i.full_address = i.full_address[:-7]
i.save()
是否可以使用Address.objects.update()
实现上述功能?
答案 0 :(得分:5)
您可以在此处使用Query Expressions
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',
)
)
请注意,如果您认为可以得到一个包含文本' Region'
的字符串 以及该字符串 end 的字符串,则这两个字符串都将替换为空字符串。似乎不太可能,但是如果要特别小心,可以使用regexp_replace
代替replace
,并在第一个Value
(即Value(' Region$')
)中使用适当的表达式以确保您只匹配要替换的零件。