Django模型外键查询并登录用户

Django模型外键查询并登录用户,django,django-models,django-views,django-templates,django-queryset,Django,Django Models,Django Views,Django Templates,Django Queryset,嗨,我正在尝试向django项目中添加“字段”,这些字段将根据查询进行计算 基本上我有两个模型,一个是用户,它是抽象用户的扩展 class CustomUser(AbstractUser): pass 我的主要模型是Project class Project(models.Model): id = models.AutoField(primary_key=True) user = models.ForeignKey(CustomUser, on_delete=model

嗨,我正在尝试向django项目中添加“字段”,这些字段将根据查询进行计算

基本上我有两个模型,一个是用户,它是抽象用户的扩展

class CustomUser(AbstractUser):
    pass
我的主要模型是Project

class Project(models.Model):
    id = models.AutoField(primary_key=True)
    user = models.ForeignKey(CustomUser, on_delete=models.PROTECT, editable=False)
    name = models.CharField(max_length=20, editable=False)
    total = models.DecimalField(max_digits=6, decimal_places=2, editable=False)
    created = models.DateTimeField(auto_now_add=True, editable=False, null=False, blank=False)
    this_month = datetime.datetime.now().month
    allprojectsthismonth = Project.objects.filter(created__month=this_month)

    def __str__(self):
        return self.name
我使用以下视图通过web表单创建项目对象:

def homepage(request):
    if request.method == "POST":
        project = Project()
        name = request.POST.get('name')
        total = request.POST.get('total')
        created = datetime.datetime.now()
        user = request.user
        project.user = user
        project.name = name
        project.total = total
        project.created = created
        project.save()
        
        #return HttpResponse(reverse("homepage.views.homepage"))
        return render(request, 'homepage.html')
    else:

        return render(request, 'homepage.html')
我现在需要的是有一个queryset,它可以让我得到给定用户项目对象总数的组合,这样我就可以对它进行计算,我该怎么做呢

理想情况下,我将获得已登录的用户,并将所有Project.object.total的总和添加到视图中,其中user=当前已登录

谢谢

编辑:这样行吗

class Project(models.Model):
id = models.AutoField(primary_key=True)
user = models.ForeignKey(CustomUser, on_delete=models.PROTECT, editable=False)
name = models.CharField(max_length=20, editable=False)
total = models.DecimalField(max_digits=6, decimal_places=2, editable=False)
created = models.DateTimeField(auto_now_add=True, editable=False, null=False, blank=False)
this_month = datetime.datetime.now().month
projectsthismonth = self.objects.filter(created__month=this_month)

def monthlyTotal(self,request):
    projectsthismonth.objects.filter(
        user=request.user
    ).aggregate(
        sum_total=Sum('total')
    )['sum_total']

但是,我似乎遗漏了一些内容。

您可以获得
项目的查询集,其中用户是登录用户,具有:

Project.objects.filter(user=request.user)
将使用
user=request.user
检索
项目
s的
总计
的总和。如果根本没有与
用户
相关的项目,则该值将为

from django.utils.timezone import now

class Project(models.Model):
    id = models.AutoField(primary_key=True)
    user = models.ForeignKey(CustomUser, on_delete=models.PROTECT, editable=False)
    name = models.CharField(max_length=20, editable=False)
    total = models.DecimalField(max_digits=6, decimal_places=2, editable=False)
    created = models.DateTimeField(auto_now_add=True)
    
    def monthlyTotal(self,user):
        this_month = now().month
        return Project.objects.filter(
            created__month=this_month,
            user=user
        ).aggregate(
            sum_total=Sum('total')
        )['sum_total']

注意:您可以将视图限制为具有


您可以获得
项目
的查询集,其中用户是登录用户,具有:

Project.objects.filter(user=request.user)
将使用
user=request.user
检索
项目
s的
总计
的总和。如果根本没有与
用户
相关的项目,则该值将为

from django.utils.timezone import now

class Project(models.Model):
    id = models.AutoField(primary_key=True)
    user = models.ForeignKey(CustomUser, on_delete=models.PROTECT, editable=False)
    name = models.CharField(max_length=20, editable=False)
    total = models.DecimalField(max_digits=6, decimal_places=2, editable=False)
    created = models.DateTimeField(auto_now_add=True)
    
    def monthlyTotal(self,user):
        this_month = now().month
        return Project.objects.filter(
            created__month=this_month,
            user=user
        ).aggregate(
            sum_total=Sum('total')
        )['sum_total']

注意:您可以将视图限制为具有


您使用
CustomUser
作为用户模型(在
AUTH\u user\u model
中)?是的,我的用户模型工作得很好,它正在添加功能。现在您使用
CustomUser
作为用户模型(在
AUTH\u user\u model
中)?是的,我的用户模型工作得很好,它正在添加功能。谢谢!那么我会直接将查询集写入视图吗?还是模型?@ThiMar:if特定于视图中的某个视图。如果在多个视图中使用相同的逻辑,那么它属于模型层。我在模型中添加了一个编辑,但不确定我是否做了正确的事情。谢谢你的帮助help@ThiMar:否,通过在类级别使用
本月
,只有在解释类时才会对其进行评估,因此如果服务器今天启动,两天后仍将使用11月。此外,模型通常不知道请求,因此您使用
用户
作为参数,而不是
请求
。非常感谢您的解释,现在对我来说,它更有意义,我对这个项目有了一条前进的道路。非常感谢,谢谢你!那么我会直接将查询集写入视图吗?还是模型?@ThiMar:if特定于视图中的某个视图。如果在多个视图中使用相同的逻辑,那么它属于模型层。我在模型中添加了一个编辑,但不确定我是否做了正确的事情。谢谢你的帮助help@ThiMar:否,通过在类级别使用
本月
,只有在解释类时才会对其进行评估,因此如果服务器今天启动,两天后仍将使用11月。此外,模型通常不知道请求,因此您使用
用户
作为参数,而不是
请求
。非常感谢您的解释,现在对我来说,它更有意义,我对这个项目有了一条前进的道路。非常感谢。