Django中的整数字段数学
from django.db import models
from django.contrib.auth.models import User
class Product(models.Model):
name = models.CharField(max_length = 127)
description = models.TextField()
code = models.CharField(max_length = 30)
lot_no = models.CharField(max_length = 30)
inventory = models.IntegerField()
commited = models.IntegerField()
available = models.IntegerField()
reorder = models.IntegerField()
created_date = models.DateField(auto_now_add = True)
comment_user = models.ForeignKey(User, null=True)
comment_txt = models.TextField()
def __unicode__(self):
return self.code + " - " + self.name + " - " + self.lot_no + " - " + str(self.created_date)
@property
def available(self):
return self.inventory - self.commited
我想在一个人输入库存数据并在Django管理模板中提交时,计算可用数量,公式是(库存 - 自己)。但是我不太确定该怎么做。
谢谢,
Jon
6 个回答
1
Don说得对,你的名字available
重复了,因为你有一个字段和一个属性。你可以把字段去掉。
这就是我在你最初的问题中给你解决方案时说的 - 我明确提到过“去掉现有的‘available’字段”。只听一半的解决方案是没办法解决问题的。
不过,我根本不同意Seth和Don的看法,他们建议重写save()函数来计算这个值。这完全是多余的数据重复。使用属性才是正确的解决办法。
3
试着在模型上重写 save
方法:
def save(self, *args, **kwargs):
"update number available on save"
self.available = self.inventory - self.committed
super(Product, self).save(*args, **kwargs)
你也可以在这里添加一些逻辑,比如如果 self.available
变成负数时要做些什么。
2
看起来你可能遇到了两个问题:一个是可用性属性和字段重叠,另一个是可用性在管理界面中没有按你预期显示。
你需要选择一种方式(属性或字段)来表示可用性,然后坚持使用这一种。Don 和 Seth 展示了如何使用字段来实现,而 Daniel 和 Ignacio 则建议使用属性。
既然你真的希望这个字段在管理界面中显示,那就选择字段吧;给它添加一个有用的帮助文本 help_text="...",去掉 @property,并重写 save() 方法。
class Product(models.Model):
# ...
availability = models.IntegerField(help_text="(updated on save)")
# Use Seth's save()
def save(self, *args, **kwargs):
self.availability = self.inventory - self.commited
super(Product, self).save(*args, **kwargs)
虽然这样做在数据规范化方面不是最好的方法,但这可能是解决你当前问题的最简单方案。
如果你使用的是 trunk 而不是 Django-1.1.1,你还可以在管理界面中使用 readonly_fields。