代码之家  ›  专栏  ›  技术社区  ›  Valachio

Django-在.update()中执行复杂操作

  •  1
  • Valachio  · 技术社区  · 6 年前

    class Address(models.Model):
        full_address = models.CharField(max_length=100)
    

    一些 full_address 以“Region”结尾。示例:

    1. 约克州马克姆大街123号

    我想把“区域”从任何 以它结尾的字段。

    Address 逐一地:

    for i in Address.objects.filter(full_address__endswith=' Region'):
        i.full_address = i.full_address[:-7]
        i.save()
    

    Address.objects.update() ?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Hamish    6 年前

    你可以用 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' 以及 结束 regexp_replace 而不是 replace Value (即。 Value(' Region$')