python - 为什么Django中模型方法的返回值没有显示在模板中?
问题描述
我的模型中有这个功能,当我尝试运行服务器时没有出现。我认为我正在正确访问该方法,但是当我尝试在 total_balance() 函数中编写 print("ENTER") 时,没有任何显示,这让我认为它甚至根本没有进入该方法。奇怪的是,如果我去掉搜索功能,这个功能就会起作用。
模型.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
视图.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)
模板.py
<h5 class="card-title">Total Balance</h5>
<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 %}
<p class="card-text">₱{{ prof.total_balance }}</p>
{% endfor %}
理想情况下,您会为上下文变量使用更合适的名称,即profiles
.
接下来,您的total_balance
方法本身有两个问题。首先,Python 中的任何方法都需要带self
参数。其次,您需要使用该参数来访问字段的值,user
而不是 User 类。所以:
def total_balance(self):
transaction_list = Transaction.objects.filter(user=self.user)
尽管请注意,第二行可以更容易地编写:
transaction_list = self.user.transaction_set.all()
推荐阅读
- linux - 在 Windows 机器上安装的 sftp 服务器上是否可以进行基于 ssh 密钥的身份验证?
- drupal - 如何在我的 sass 文件中插入图片?
- c# - 如何通过 Selenium WebDriver 和 C# 在列表 (ul) 中选择项目 (li) - 定位时超时
- windows - 在 Powershell 中删除具有序列化名称的文件夹
- php - 如何使链接“index.php?x”在页面上显示 x 部分
- javascript - bootstrap jumbotron 中的动态图像库
- javascript - 先上传文件,在表单上传文件时填写剩余数据
- java - 在 LinkedList 上的元素之间转换和切换
- android - Twilio 可编程语音 TwilioVoice.connect() 无响应
- python - 命令“python setup.py egg_info”在 /tmp/pip-install-rJRUpL/pyfinite/ 中失败,错误代码为 1