Django:Unused';v_item.pk和x27;在if表达式的末尾
如果ID已经存在于其他表中,我将尝试隐藏一个按钮。 我的模板中有一个确认按钮,用于确认订单,它将确认的订单保存在一个名为(ConfirmOrder)的表中。因此,我想如果订单已经确认,或者订单的id已经存在于确认订单表中,那么确认按钮将被禁用/隐藏,以便我无法再次确认。 我试图使用templatetags,但我发现了这个错误(if表达式末尾未使用的“v_item.pk”) 模型 模板标签Django:Unused';v_item.pk和x27;在if表达式的末尾,django,templatetags,Django,Templatetags,如果ID已经存在于其他表中,我将尝试隐藏一个按钮。 我的模板中有一个确认按钮,用于确认订单,它将确认的订单保存在一个名为(ConfirmOrder)的表中。因此,我想如果订单已经确认,或者订单的id已经存在于确认订单表中,那么确认按钮将被禁用/隐藏,以便我无法再次确认。 我试图使用templatetags,但我发现了这个错误(if表达式末尾未使用的“v_item.pk”) 模型 模板标签 from django import template from ..models import Confi
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>
我哪里做错了?或者我还有其他方法可以做到这一点吗?
有人能帮忙吗 请不要在模板中写入业务逻辑。模板处理呈现逻辑。与业务逻辑无关。Django模板语言被刻意限制,以避免人们在模板中编写大量业务逻辑
在视图中,您可以使用以下选项设置查询集
:
from django.db.models import Exists, OuterRef
def confirm_purchase(request):
viewitem = OrderItem.objects.annotate(
is_active=Exists(
ConfirmOrder.objects.filter(is_active=1, pk=OuterRef('pk'))
)
)
return render(request, 'managepurchase/confirmed_purchase.html', {'viewitem': viewitem})
从django.db.models导入存在,OuterRef
def确认_购买(请求):
viewitem=OrderItem.objects.annotate(
是否激活=存在(
ConfirmOrder.objects.filter(is_active=1,pk=OuterRef('pk'))
)
)
返回呈现(请求'managepurchase/confirmed_purchase.html',{'viewitem':viewitem})
然后,在模板中,我们可以使用以下内容进行渲染:
{% if v_item.is_active %}
<a class="btn btn-warning btn-sm" href="{% url 'confirm_order' v_item.pk %}"> Confirm </a>
{% endif %}
{%if v_item.is_active%}
{%endif%}
您的行
{% if not check_item_already_exists v_item.pk %}
包含条件的两个部分(检查项目\u已存在
和检查项目.pk
),但只允许一个部分
您无法在Django模板(这是Django中的设计决策)内将参数传递给函数调用,因此您必须找到另一种方法来获取模板中所需的信息,可能是在视图中而不是在模板中调用函数。您可以共享传递
viewitem
的视图吗,我编辑了问题,所以,我不应该使用模板标签?@EricksonKitoz:不,但你为什么要在这里使用模板标签。根据它的实现,它只是v_item.is_active
(除了你做一个额外的查询,这会使它变得相当慢)。如果你需要更复杂的东西,最好把它们移到视图层。事实上,我是django的新手,我正在尝试一种更好的方法。我试试你的方法。ThanksIf is use v_item.is_active我必须创建一个视图吗?@EricksonKitoz:不,因为它只是模型的一个字段,您只需在这里编写{%if v_item.is_active%}
。
{% if v_item.is_active %}
<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 %}