我需要以这样的方式更新Django queryset bookings_to_save
:
for booking in bookings_to_save:
booking.status = Booking.STATUS_CHOICES.approved
booking.title = 'ST{}{}'.format(booking.pk, booking.created.strftime('%Y%m%d'))
booking.save()
我试过这样的事情:
bookings_to_save.update(
status=Booking.STATUS_CHOICES.approved,
title='ST{}{}'.format(F('id'), F('created'))
)
在SQL中,我会这样做:
update bookings_booking bb set title='ST' || bb.id || to_char(bb.created, 'YYYYMMDD') where << some condition >>;
有什么办法可以使用django工具完成这项任务?
答案 0 :(得分:1)
根据似乎尚不支持的https://docs.djangoproject.com/en/1.7/ref/models/queries/#supported-operations-with-f。理想情况下它看起来像:
bookings_to_save.update(
status=Booking.STATUS_CHOICES.approved,
title='ST' + F('id') + F('created'))
)
因为支持的操作是F
上的运算符(F
需要成为外表达式的一部分以形成F表达式)。
还可以想象一种新的字符串表达式(S表达式;对不起Lisp读者):
bookings_to_save.update(
status=Booking.STATUS_CHOICES.approved,
title=S('ST{}{}', F('id'), F('created')))
)