如何计算Django中数据库表的所有对象?

时间:2018-08-14 02:34:09

标签: django count django-orm

我有一个如下模型,我想用Django 2.0.4过滤表user's all work_times中的Work,在此先感谢您的任何建议。

class Work(models.Model):
    name = models.CharField(max_length=800)
    date = models.DateField(auto_now=False, null=True, blank=True)
    time = models.TimeField(auto_now=False, null=True, blank=True)
    work_times = models.FloatField(default=1, verbose_name="work times(hours)")
    user = models.ManyToManyField(User, related_name="works", blank=True)

3 个答案:

答案 0 :(得分:2)

您可以使用以下方法获取所有信息:

all_work = Work.objects.filter(user=sample_user)

,如果您想知道该查询中的行数,可以使用:

all_work_count = Work.objects.filter(user=sample_user).count()

您可以通过以下方式访问该查询的每个项目:

for each_work in all_work:
    print(each_work.work_times)

编辑

通过获取用户的所有作品,您可以从工作实例访问单独的work_time。但是,您也可以通过以下方式访问work_times:

all_work = Work.objects.filter(user=sample_user).values('work_times')

这只会给您work_times。但是这样一来,您将无法知道work_time属于哪个工作。

编辑2
要获得总的工作时间,您有两种选择,一种是简单的,另一种是更为复杂的:

简单

all_works = Work.objects.filter(user=sample_user)
total_work = 0
for work in all_works:
    total_work += work.work_times

复杂的一个

尽管我认为这是更有效的方法,并且合二为一,但您可能还是需要稍微玩一下

from django.db.models import Sum

total_works = Work.objects.filter(user=sample_user).aggregate(Sum("work_times"))

答案 1 :(得分:1)

如果您只想包括work_times不同于1的那些,则可以用这种方式进行计数。

public with sharing class Language {

    public pagereference Refresh() {
        string langcode = SelectLanguage;
        pagereference pg=new pagereference('/supportagent/supportAgentPage?lang=es_US');
        pg.getParameters().put('lang',SelectLanguage);
        pg.setRedirect(true);
        return pg;

    }


 public Language () 
    { 

        String s= ApexPages.currentPage().getParameters().get('SelectLanguage');
        // default value
        Cookie lang = ApexPages.currentPage().getCookies().get('lang');  
        String attuale = ApexPages.currentPage().getParameters().get('lang'); 
            if (attuale == null) 
            {
            // do nothing
            }    

             else {     
                    if (attuale != String.valueOF(lang) && attuale != null)
                        {      
                            String actualLanguage = attuale;        
                            lang = new Cookie('lang', actualLanguage,null,-1,false);
                        }   
                     }// Set the new cookie for the page      
    ApexPages.currentPage().setCookies(new Cookie[]{lang});
    }

    public String getLang() 
    {
        Cookie lang = ApexPages.currentPage().getCookies().get('lang');

        if(lang == null) 
        {       
            return 'it';
        }

        return lang.getValue();

    }

            public String SelectLanguage{get;set;}
           public String LanguageOption{get;set;}
           public List<SelectOption> getLanguageOptions() 
    {
        List<SelectOption> LanguageOption= new List<SelectOption>();
        LanguageOption.add(new SelectOption(',','Language'));
        LanguageOption.add(new SelectOption('Es_US','English'));
        LanguageOption.add(new SelectOption('Da','Danish'));
        LanguageOption.add(new SelectOption('nl_NL','Dutch'));
        LanguageOption.add(new SelectOption('zh_TW','Chinese (Traditional)'));
        return LanguageOption;
    }

}

VF PAGE:

<apex:page standardStylesheets="false" title="Welcome to Support Agent Portal" sidebar="false" showHeader="false" showChat="true" language="{!Lang}"  controller="Language" >


<apex:form >
<apex:pageBlock >
  <apex:pageBlockSection >
    <apex:selectList value="{!SelectLanguage}" multiselect="false" size="1">                
                <apex:selectOptions value="{!LanguageOptions}" />
                <apex:actionSupport event="onchange" action="{!Refresh}"/>
                </apex:selectList>                
    </apex:pageBlockSection>    
    </apex:pageBlock>
</apex:form>

或者通过这种方式还包括work_times等于1的那些...

count = User.objects.filter(work__gt=1).count()

并从所有具有用户的Work对象中删除查询集...

count = User.objects.filter(work__gt=1).count()

您还可以通过添加.count()从上一次查询开始对它们进行计数。

答案 2 :(得分:1)

count = User.objects.filter(username ='username')。first()。work_set.all()。count()