作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在研究一些 Django,遇到了一个小问题。
我正在寻找一种使 suit_length 默认等于客户高度的方法。这种代码对我有用:
class Customer(models.Model):
name = models.CharField(max_length=20)
height = models.IntegerField(default=170)
class Suit(models.Model)
customer = models.ForeignKey(Customer)
suit_design = models.CharField(max_length=100)
suit_length = models.IntegerField(default=0)
def get_height(self):
self.suit_length = self.customer.height
return
但每次我创建一个新的 Suit 时,它的默认 suit_length = 0,我必须运行 get_height() 才能得到我想要的。有没有办法将 suit_length 默认为 customer.height 并避免每次创建新套装时都运行 get_height() ?我可能正在寻找这样的东西:
class Customer(models.Model):
name = models.CharField(max_length=20)
height = models.IntegerField(default=170)
class Suit(models.Model)
customer = models.ForeignKey(Customer)
suit_design = models.CharField(max_length=500)
suit_length = models.IntegerField(default=lambda:self.customer.height)
但是这段代码不起作用。
最佳答案
Django 使用 save() 方法来实际保存数据。你可以像这样覆盖它:
class Suit(models.Model):
def save(self):
if self.suit_length == 0:
self.suit_length = self.customer.height
super(Suit, self).save()
它不会覆盖默认值,但可以实现您的目标。
关于python - 如何在 Django 中默认 IntegerField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22892651/
我是一名优秀的程序员,十分优秀!