在django中更新模型字段在运行时无法正常工作

时间:2019-06-11 06:06:11

标签: django django-models django-orm

我有一个模型产品,另一个模型已损坏。在“损坏的模型”中,我添加了某种产品的损坏数量。现在,当外键匹配时,我需要从Product模型的stock字段中减少Damaged_quantity。当我在Damaged模型中添加了Damaged_quantity时,代码起作用了,但是当某种产品没有Damaged_quantity时,它抛出了类型错误,因此我在模板中尝试了这种方法,但是它不起作用。

  

models.py

class Product(models.Model):
    name = models.CharField(max_length=250)
    quantity = models.IntegerField()

    @property
    def current_quantity(self):
        return self.quantity - self.damaged_set.all().aggregate(sum=Sum('damaged_quantity')).get('sum', 0)

class Damaged(models.Model):
    product = models.ForeignKey('Product', on_delete=models.CASCADE)
    damaged_quantity = models.IntegerField(default=0)
  

模板

    <td>
        {% for damage in damaged %}
                {% if damage.product_id == product.id %}
                {{product.current_quantity}}
                {% else %}
                {{ product.quantity }} # else part not working properly.
                {% endif %}
         {% endfor %}
    </td>

1 个答案:

答案 0 :(得分:0)

我想是因为您的查询集为空时返回None。因此,您应该执行以下操作:

    @property
    def current_quantity(self):
        damaged = self.damaged_set.all().aggregate(sum=Sum('damaged_quantity')).get('sum', 0)
        if not damaged:
           damaged = 0
        return self.quantity - damaged