Мне нужно обновить несколько записей (строк) в таблице.

Во-первых, я получаю информацию для выбора строк для обновления:

ran_st1 = 1
ran_st2 = 1
ran_bra = 'A'
pay_ide = 'FR'
bra_lib = 'Polyvitamines et oligo-éléments'

Затем я выбираю строки для обновления:

rows= Randomisation.objects.filter(Q(ran_st1 = ran_st1) & Q(ran_st2 = ran_st2) & Q(ran_bra = ran_bra) & Q(pay_ide = pay_ide))

И потом, я хотел сделать такую ​​петлю, но не уверен:

for row in rows:
    r = get_object_or_404(Randomisation, ran_ide = row.ran_ide)
    r.ran_act = 1
    r.save()
1
SLATER 29 Апр 2020 в 13:04

1 ответ

Вы можете обновить с помощью .update(..) [Джанго-док]:

Randomisation.objects.filter(
    ran_st1=ran_st1,
    ran_st2 = ran_st2,
    ran_bra = ran_bra,
    pay_ide = pay_ide
).update(ran_act=1)

Это будет работать с запросом, который выглядит так:

UPDATE randomisation
SET ran_act = 1
WHERE ran_st1 = 1
  AND ran_st2 = 1
  AND ran_bra = 'A'
  AND pay_ide = 'FR'
  AND bra_lib = 'Polyvitamines et oligo-elements'

Таким образом, это делается в одном запросе, а не в нескольких запросах, где вы каждый раз извлекаете элемент, обновляете этот элемент, а затем отправляете запрос на обновление в базу данных для этой конкретной записи.

1
Willem Van Onsem 29 Апр 2020 в 13:08