Django:if 表达式末尾未使用 'v_item.pk'
Django: Unused 'v_item.pk' at end of if expression
如果该 ID 已存在于其他 table 中,我将尝试隐藏该按钮。
我的模板中有一个确认按钮,用于确认订单并将确认的订单保存在名为 (ConfirmOrder) 的 table 中。所以我想如果订单已经确认或者该订单的 ID 已经存在于 ConfirmOrder table 中确认按钮是 disabled/hidden 这样我就无法再次确认它。
我尝试使用 templatetags 我收到此错误(如果表达式末尾未使用 'v_item.pk')
型号
class ConfirmOrder(models.Model):
order_no = models.ForeignKey(OrderDetail, related_name='confirmorders', on_delete = models.SET_NULL, null=True)
product = models.ForeignKey(StoreStock, null=True, blank=True, on_delete = models.SET_NULL)
quantity = models.DecimalField(max_digits = 10, decimal_places = 2, blank=True)
buying_price = models.DecimalField(max_digits = 10, decimal_places = 2, blank=True)
amount = models.DecimalField(max_digits = 10, decimal_places = 2, blank=True)
confirm_note = models.CharField(max_length = 50, blank=True)
is_active = models.IntegerField(default=1)
模板标签
from django import template
from ..models import ConfirmOrder
register = template.Library()
@register.simple_tag
def check_item_already_exists(request, pk):
return ConfirmOrder.objects.filter(id=pk, is_active=1).exists()
模板
{% for v_item in viewitem %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ v_item.order_no.location }}</td>
<td>{{ v_item.order_no.order_date }}</td>
<td>{{ v_item.order_no.supplier }}</td>
<td>{{ v_item.order_no.order_number }}</td>
<td>{{ v_item.order_no.pay_ref }}</td>
<td>{{ v_item.product }}</td>
<td>{{ v_item.quantity }}</td>
<td>{{ v_item.buying_price }}</td>
<td>{{ v_item.amount }}</td>
<td>
{% load check_item %}
{% if not check_item_already_exists v_item.pk %}
<a class="btn btn-warning btn-sm" href="{% url 'confirm_order' v_item.pk %}"> Confirm </a>
{% endif %}
</td>
查看
def confirm_purchase(request):
viewitem = OrderItem.objects.all()
return render(request, 'managepurchase/confirmed_purchase.html', {'viewitem': viewitem})
我哪里做错了?还是有其他方法可以做到这一点?
有谁能帮忙吗!
请不要在模板中写入业务逻辑。模板处理 呈现逻辑 。不符合 业务 逻辑。 Django 模板语言 有意 受到限制,以避免人们在模板中编写大量业务逻辑。
在视图中,您可以 .annotate(…)
[Django-doc] QuerySet
与:
from django.db.models import Exists, OuterRef
def confirm_purchase(request):
viewitem = OrderItem.objects.annotate(
is_active=Exists(
<b>ConfirmOrder.objects.filter(is_active=1, pk=OuterRef('pk'))</b>
)
)
return render(request, 'managepurchase/confirmed_purchase.html', {'viewitem': viewitem})
然后在模板中我们可以渲染它:
{% if v_item<b>.is_active</b> %}
<a class="btn btn-warning btn-sm" href="{% url 'confirm_order' v_item.pk %}"> Confirm </a>
{% endif %}
你的线路
{% if not check_item_already_exists v_item.pk %}
条件包含 2 个部分(check_item_already_exists
和 v_item.pk
),但只允许有一个部分。
您不能将参数传递给 Django 模板中的函数调用(这是 Django 中的设计决定),因此您必须找到另一种方法来获取模板中所需的信息,也许是通过调用函数视图而不是在模板中。
如果该 ID 已存在于其他 table 中,我将尝试隐藏该按钮。 我的模板中有一个确认按钮,用于确认订单并将确认的订单保存在名为 (ConfirmOrder) 的 table 中。所以我想如果订单已经确认或者该订单的 ID 已经存在于 ConfirmOrder table 中确认按钮是 disabled/hidden 这样我就无法再次确认它。 我尝试使用 templatetags 我收到此错误(如果表达式末尾未使用 'v_item.pk')
型号
class ConfirmOrder(models.Model):
order_no = models.ForeignKey(OrderDetail, related_name='confirmorders', on_delete = models.SET_NULL, null=True)
product = models.ForeignKey(StoreStock, null=True, blank=True, on_delete = models.SET_NULL)
quantity = models.DecimalField(max_digits = 10, decimal_places = 2, blank=True)
buying_price = models.DecimalField(max_digits = 10, decimal_places = 2, blank=True)
amount = models.DecimalField(max_digits = 10, decimal_places = 2, blank=True)
confirm_note = models.CharField(max_length = 50, blank=True)
is_active = models.IntegerField(default=1)
模板标签
from django import template
from ..models import ConfirmOrder
register = template.Library()
@register.simple_tag
def check_item_already_exists(request, pk):
return ConfirmOrder.objects.filter(id=pk, is_active=1).exists()
模板
{% for v_item in viewitem %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ v_item.order_no.location }}</td>
<td>{{ v_item.order_no.order_date }}</td>
<td>{{ v_item.order_no.supplier }}</td>
<td>{{ v_item.order_no.order_number }}</td>
<td>{{ v_item.order_no.pay_ref }}</td>
<td>{{ v_item.product }}</td>
<td>{{ v_item.quantity }}</td>
<td>{{ v_item.buying_price }}</td>
<td>{{ v_item.amount }}</td>
<td>
{% load check_item %}
{% if not check_item_already_exists v_item.pk %}
<a class="btn btn-warning btn-sm" href="{% url 'confirm_order' v_item.pk %}"> Confirm </a>
{% endif %}
</td>
查看
def confirm_purchase(request):
viewitem = OrderItem.objects.all()
return render(request, 'managepurchase/confirmed_purchase.html', {'viewitem': viewitem})
我哪里做错了?还是有其他方法可以做到这一点? 有谁能帮忙吗!
请不要在模板中写入业务逻辑。模板处理 呈现逻辑 。不符合 业务 逻辑。 Django 模板语言 有意 受到限制,以避免人们在模板中编写大量业务逻辑。
在视图中,您可以 .annotate(…)
[Django-doc] QuerySet
与:
from django.db.models import Exists, OuterRef
def confirm_purchase(request):
viewitem = OrderItem.objects.annotate(
is_active=Exists(
<b>ConfirmOrder.objects.filter(is_active=1, pk=OuterRef('pk'))</b>
)
)
return render(request, 'managepurchase/confirmed_purchase.html', {'viewitem': viewitem})
然后在模板中我们可以渲染它:
{% if v_item<b>.is_active</b> %}
<a class="btn btn-warning btn-sm" href="{% url 'confirm_order' v_item.pk %}"> Confirm </a>
{% endif %}
你的线路
{% if not check_item_already_exists v_item.pk %}
条件包含 2 个部分(check_item_already_exists
和 v_item.pk
),但只允许有一个部分。
您不能将参数传递给 Django 模板中的函数调用(这是 Django 中的设计决定),因此您必须找到另一种方法来获取模板中所需的信息,也许是通过调用函数视图而不是在模板中。