将带有外键的自定义标签渲染到模板问题中
Rendering a custom tag with a foreign key into templates issues
嗨,这是我正在使用的模型
从 django.db 导入模型
从 users.models 导入 CustomUser
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)
def __str__(self):
return self.name
class 由使用此视图的 HTML 表单填充:
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')
所以我在我的应用程序中添加了一个自定义标签,它是一个函数
@register.filter
def monthlyTotal(user):
this_month = now().month
return Project.objects.filter(
created__month=this_month,
user=user
).aggregate(
sum_total=Sum('total')
)['sum_total']
我在模板中这样调用标签
<p>Total monthly sales = {{ user.username|monthlyTotal }}</p>
但是我收到一条错误消息说字段 ID 需要一个数字但得到了 'grandmaster' 这是我的测试用户的名字,他有多个项目对象..如果我切换到 user.id 我没有错误,但它显示 None 这是有道理的,因为当我在管理员中查看我的项目部分时,字段用户由用户名而不是 id 填充,因此不会有 user=id
的项目
您需要使用 user
,而不是用户名,因此:
<p>Total monthly sales = {{ <b>user</b>|monthlyTotal }}</p>
嗨,这是我正在使用的模型
从 django.db 导入模型 从 users.models 导入 CustomUser
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)
def __str__(self):
return self.name
class 由使用此视图的 HTML 表单填充:
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')
所以我在我的应用程序中添加了一个自定义标签,它是一个函数
@register.filter
def monthlyTotal(user):
this_month = now().month
return Project.objects.filter(
created__month=this_month,
user=user
).aggregate(
sum_total=Sum('total')
)['sum_total']
我在模板中这样调用标签
<p>Total monthly sales = {{ user.username|monthlyTotal }}</p>
但是我收到一条错误消息说字段 ID 需要一个数字但得到了 'grandmaster' 这是我的测试用户的名字,他有多个项目对象..如果我切换到 user.id 我没有错误,但它显示 None 这是有道理的,因为当我在管理员中查看我的项目部分时,字段用户由用户名而不是 id 填充,因此不会有 user=id
的项目您需要使用 user
,而不是用户名,因此:
<p>Total monthly sales = {{ <b>user</b>|monthlyTotal }}</p>