Использование Django .update() с помощью .get()

#django #django-models #orm

#django #django-модели #orm

Вопрос:

У меня есть таблица счетов

 # app/models.py

class tbl_invoice(models.Model):
    invoice_id                      = models.IntegerField(blank=True, null=True)
    invoice_number                  = models.IntegerField(blank=True, null=True)
    quotation_id                    = models.IntegerField(blank=True, null=True)
    quotation_number                = models.IntegerField(blank=True, null=True)
    invoiced                        = models.CharField(max_length=50, default='', blank=True, null=True)
 

эта таблица содержит записи счетов-фактур и предложений, пользователь системы имеет возможность преобразовать любое предложение в счет-фактуру, но запись предложения все равно останется вместе с вновь созданной записью счета-фактуры

и это мои взгляды

 #views.py

    obj = tbl_invoice.objects.get(pk='someId')   # getting existing record with pk
    obj.pk = None
    obj.invoice_id  = 'someId'
    obj.quotation_id = None             
    obj.invoice_number = 'someValue'
    obj.quotation_number = None
    obj.invoiced = 'no'
    obj.type_status = 'invoice'
    obj.save()
 

приведенный выше код работает нормально, он создает новую запись счета-фактуры, а также поддерживает старую запись предложения

однако после преобразования предложения в счет-фактуру я также хочу обновить invoiced значение в записи предложения на yes

для этого я старался

 obj.update(invoiced = 'yes')
 

но .update() не работает на .get()

как я могу создать новую запись из существующей записи и одновременно обновить старую запись или мне нужно использовать несколько запросов

Спасибо за любую помощь.

Ответ №1:

Просто,

 old_obj = tbl_invoice.objects.get(pk='someId')  # getting existing record with pk

# creating new object
new_obj = old_obj

# altering new object values
new_obj.pk = None
new_obj.invoice_id = 'someId'
new_obj.quotation_id = None
new_obj.invoice_number = 'someValue'
new_obj.quotation_number = None
new_obj.invoiced = 'no'
new_obj.type_status = 'invoice'

# altering old object value
old_obj.invoiced = "yes"

# saving objects
new_obj.save()
old_obj.save()

 

Комментарии:

1. ах! простой, но эффективный, почему я не мог об этом подумать … в любом случае, спасибо за помощь: D