我有这个模型
class Home(models.Model):
...
number_female = models.IntegerField()
number_male = models.IntegerField()
def all_people(self):
return self.number_female + self.number_male
all_members = all_people(self)
我得到了:name 'self' is not defined
。
如何定义获取模型方法结果的字段?这个Home
场景只是一个例子,我有更复杂的模型,我只是想让问题更加清晰。
答案 0 :(得分:1)
如果您想将all_members
之类的计算字段添加为模型的一部分,则必须覆盖save
函数:
class Home(models.Model):
...
all_members = models.IntegerField()
def save(self):
all_members = self.all_people()
super(Home, self).save()
现在您可以按all_members
进行过滤。在这种情况下,最好将@property
装饰器用于all_members
。
另一种方法是使用a different stackoverflow answer中提到的Django的extra
方法
答案 1 :(得分:1)
您仍然需要将all_members
定义为模型字段(而不是整数),然后在save()
实例时使用所需的值填充它。
class Home(models.Model):
...
number_female = models.IntegerField()
number_male = models.IntegerField()
all_members = models.IntegerField()
def save(self):
self.all_members = self.number_female + self.number_male
super(Home, self).save()
答案 2 :(得分:0)
我认为Django Managers可以成为解决方案。例如:
自定义管理器:
class CustomFilter(models.Manager):
def all_people(self):
return self.number_female + self.number_male
型号:
class Home(models.Model):
....
objects= CustomFilter()
查看:
allpeople= Home.objects.all_people(Home.objects.all())