I am new to Django and Python and I want to do something I used to do very often in Java EE.
Consider the following model (only relevant classes):
cl
The "unit price" is a literally a function of two different fields. As such I would tend to write it like this:
class Item(models.Model):
name = models.CharField(max_length=40)
default_price = models.DecimalField(max_digits=6, decimal_places=2, default=50)
def __unicode__(self):
return self.name
class SaleDetail(models.Model):
item = models.ForeignKey(Item)
deposit = models.ForeignKey(Deposit)
quantity = models.PositiveIntegerField()
entered_unit_price = models.DecimalField(max_digits=6, decimal_places=2, default=None)
sale = models.ForeignKey(Sale)
@property
def unit_price(self, value):
if self.entered_unit_price is None:
return self.item.default_price
else:
return self.entered_unit_price
@unit_price.setter
def unit_price(self, value):
self.entered_unit_price = value
Then use it like so:
print(sd.unit_price)
sd.unit_price = 500
sd.save()