【问题标题】:Using Django .update() with .get()将 Django .update() 与 .get() 一起使用
【发布时间】:2020-11-24 07:50:57
【问题描述】:

我有一张发票表

# 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()

如何从现有记录创建新记录并同时更新旧记录 还是我必须使用多个查询

感谢您的帮助。

【问题讨论】:

    标签: django django-models orm


    【解决方案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()
    
    

    【讨论】:

    • 啊!简单而有效,为什么我想不到...无论如何,谢谢您的帮助:D
    猜你喜欢
    • 2015-11-03
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-15
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    相关资源
    最近更新 更多