9👍
Django uses the save() method to actually save the data. You may overwrite it like so:
class Suit(models.Model):
def save(self):
if self.suit_length == 0:
self.suit_length = self.customer.height
super(Suit, self).save()
It is not overwriting the default, but it achieves your goal.
1👍
You want an invariant to be true at run-time, which is that the initial length of a Suit is equal to the height of a Customer.
Doesn’t the pythonic way to do this involve __ init __() ?
class Suit(models.Model)
customer = models.ForeignKey(Customer)
suit_design = models.CharField(max_length=500)
suit_length = models.IntegerField(default=lambda:self.customer.height)
def __init__(self, args, kwargs):
super(models.Model, args, kwargs)
if kwargs['customer']:
self.customer = kwargs['customer']
# this creates the invariant
self.suit_length = self.customer.height
else:
raise ValueError("Must have a customer before constructing a Suit")
# More code for suit_design, etc.
}
- How disable return of HTML error page with django rest framework?
- How to display "This many months ago" in Django using Humanize?
Source:stackexchange.com