我有一个如下模型,我想用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)
答案 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()