我在我的模型中有这个功能,当我尝试运行服务器时没有出现。我想我正在正确地访问该方法,但当我尝试在total_balance()函数中编写print(“ENTER”)时,没有任何显示,这让我觉得它甚至都没有输入方法。奇怪的是,如果我取出搜索功能,该功能将起作用。
model.py
class Profile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE)
def total_balance():
transaction_list = Transaction.objects.filter(user=User)
total_balance_amount = 0
for transaction in transaction_list:
if transaction.category=='Income':
total_balance_amount += transaction.amount
elif transaction.category=='Expense':
total_balance_amount -= transaction.amount
return total_balance_amount
views.py
def profile(request):
if request.method == 'GET':
query = request.GET.get('q')
if query and query!="":
results = Transaction.objects.filter(Q(tag__icontains=query))
else:
results = Transaction.objects.all()
transactions = {
'transactions' : results,
}
profile = {
'profile' : Profile.objects.all()
}
return render(request, 'users/profile.html', transactions, profile)
template.py
<p class="card-text">₱{{ profile.total_balance }}</p>
有人可以请帮助我找出这个不起作用的原因以及我如何解决这个问题?谢谢
这里至少有四件事是错的。
首先,由于某种原因,你将两个单独的词典传递给render。这不起作用; 你需要一个包含多个条目的字典。
context = {
'transactions' : results,
'profile' : Profile.objects.all()
}
return render(request, 'users/profile.html', context )
其次,profile- 尽管有单数名称 - 是所有配置文件的查询集。您需要在模板中迭代它:
{% for prof in profile %}
₱{{ prof.total_balance }}
{% endfor %} 理想情况下,您可以为上下文变量使用更合适的名称,即profiles。接下来,您的total_balance方法本身有两个问题。首先,Python中的任何方法都需要获取self参数。其次,您需要使用该参数来访问值的的user领域,而不是类用户。所以:
def total_balance(self): transaction_list = Transaction.objects.filter(user=self.user) 虽然注意到第二行可以更容易编写:
transaction_list = self.user.transaction_set.all()
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。