Django模型外键查询并登录用户
嗨,我正在尝试向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
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月。此外,模型通常不知道请求,因此您使用用户
作为参数,而不是请求
。非常感谢您的解释,现在对我来说,它更有意义,我对这个项目有了一条前进的道路。非常感谢。