以下是普通模型方法还是属性?
@property
def num_used_licenses(self):
return len(CompanyUser.objects.filter(company_id=self.pk, activated_on__isnull=False)) # why doesn't count() work here?
两点:
让我印象深刻的是,如果property
既琐碎又不带任何参数,那么您会使用它,但是上面应该是什么,为什么?
答案 0 :(得分:0)
如果要访问num_used_licenses
作为Model属性(不需要像方法一样调用),请使用@property
装饰器。如果将来有机会将其更改为接受参数,请将其保留为方法。
Django Model Methods文档包括@property
装饰器的用法示例:
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
birth_date = models.DateField()
def baby_boomer_status(self):
"Returns the person's baby-boomer status."
import datetime
if self.birth_date < datetime.date(1945, 8, 1):
return "Pre-boomer"
elif self.birth_date < datetime.date(1965, 1, 1):
return "Baby boomer"
else:
return "Post-boomer"
@property
def full_name(self):
"Returns the person's full name."
return '%s %s' % (self.first_name, self.last_name)
以及指向glossary的链接:
属性
也称为“托管属性”,是自2.2版以来Python的功能。这是一种实现属性的巧妙方法,其用法类似于属性访问,但是其实现使用方法调用。