2015-07-01 2 views
1

мне нужно обновить Django QuerySet bookings_to_save таким образом:Джанго обновление QuerySet на основе существующих полей

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?

ответ

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')) 
) 

, потому что операции, поддерживаемые операторы на FF s должен быть частью внешнего выражения, чтобы сформировать F-выражение).

Можно также представить себе новый вид строкового выражения (S-выражений; жаль лисповские читателей):

bookings_to_save.update(
    status=Booking.STATUS_CHOICES.approved, 
    title=S('ST{}{}', F('id'), F('created'))) 
)