【问题标题】:Django method update_or_create troubles to increment valueDjango 方法 update_or_create 增加值的麻烦
【发布时间】:2017-04-19 19:41:06
【问题描述】:

我有一个 Django 模型:

class Item_received_log(models.Model):
   name = models.CharField(max_length=250)
   quantity = models.FloatField(default=1)

class Inventory (models.Model):
   name = models.CharField(max_length=250)
   quantity = models.FloatField(default=1)

我想在每次以匹配名称发布 Item_received_log 的新项目时更新 Inventory.quantity。我不确定它是否正确,但我决定重写 Item_received_log 类的 save 方法,以便在保存时更新库存列表:

def save(self, *args, **kwargs):
    obj, created = Inventory.objects.update_or_create(
             name=self.name,
             defaults = {'quantity':(quantity + self.quantity)})
    super(Item_received_log, self).save(*args, **kwargs)

而在回报: /admin/accountable_persons/item_received_log/17/change/ 处的名称错误 全局名称“数量”未定义

如何解决我的问题或提出更好的解决方案?

【问题讨论】:

    标签: python django


    【解决方案1】:

    如果我们可以简单地将F() 表达式放入update_or_create 的默认部分来完成所有魔法,那会容易得多,但请求此功能的issue 仍然开放。

    不过,您现在可以使用更详细的方法:

    from django.db.models import F
    
    def save(self, *args, **kwargs):
        obj, created = Inventory.objects.get_or_create(name=self.name)
        obj.quantity = F('quantity') + self.quantity
        obj.save()
        super(Item_received_log, self).save(*args, **kwargs)
    

    【讨论】:

    • 不幸的是,它对我不起作用。 get_or_greate 中缺少默认属性,表达式 obj.quantity = F('quantity') + self.quantity 不会更新值。
    • 是的!其次,如果我们可以在 update_or_create 的默认部分中加入 F() 表达式 - 实际上尝试这样做但没有奏效。 :(
    • 这个 sn-p 为我工作!显然数量字段默认设置为 0
    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多