2

thisおよびthis docsに従って、複数のオブジェクトのフィールド'blog/'から部分文字列を削除したい:slug

>>> import re
>>> from django.db.models import F
>>> p = re.compile('blog/')
>>> Blog.objects.update(slug=p.sub('', F('slug')))
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: expected string or buffer

最後の文字列に追加しようとしましstr()たが、エラーなしで合格しました:

>>> Blog.objects.update(slug=p.sub('', str(F('slug'))))

ただし、すべてのオブジェクトのフィールドに挿入(DEFAULT: )されます。slug

助言がありますか?

4

3 に答える 3

2

そんなことはできません。更新はデータベース内で完全に行われるため、SQL に変換可能なものである必要がありますが、コードはそうではありません。以下を反復して更新する必要があります。

for blog in Blog.objects.filter(slug__startswith='blog/'):
    blog.slug = blog.slug.replace('blog/', '')
    blog.save()
于 2012-09-11T14:17:20.627 に答える