请帮助避免重复代码。
我需要调用get_new_authors_entries()的get_count_authors_entries()
from django.db import models
from django.contrib.auth.models import User, UserManager
class UserProfile(User):
phone = models.CharField(
max_length=50,
blank=False,
)
skype = models.CharField(
max_length=50,
blank=False,
)
@classmethod
def get_new_authors_entries(self):
return self.objects.filter(is_active=1, is_superuser=0).order_by('-date_joined')
@classmethod
def get_count_authors_entries(self):
return self.objects.filter(is_active=1, is_superuser=0).order_by('-date_joined').count()
答案 0 :(得分:3)
首先,不要将参数调用为类方法self
。按照惯例,用于实例:类方法的参数是cls
。
其次,方法之间的唯一区别是添加了count()
。那么为什么你不能把它放在另一个呼叫的结果上呢?
@classmethod
def get_count_authors_entries(cls):
return cls.get_new_authors_entries().count()
另请注意,在Django中将这些方法放在自定义管理器上而不是使用classmethods更为惯用。最后,我会问你为什么需要count方法,因为无论你在哪里调用它都可以将count()添加到get_new_authors_entries方法的结果中。
答案 1 :(得分:0)
当你可以逃脱时,没有必要定义两种方法。
@classmethod
def get_authors_entries(cls):
return self.objects.filter(is_active=1, is_superuser=0).order_by('-date_joined')
现在,如果您想获取新的作者条目,只需致电get_authors_entries
,如果您想获得计数,只需在返回的查询集上调用count
方法。