怎么削减记录?

时间:2014-09-29 07:55:48

标签: python django python-3.x

请帮助避免重复代码。

我需要调用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()        

2 个答案:

答案 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方法。