#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