【问题标题】:Django Template filter the query set already renderedDjango 模板过滤已呈现的查询集
【发布时间】:2021-04-21 08:36:06
【问题描述】:

我有模特

class TransHeader(models.Model):
    th_type = models.CharField(max_length=200)
    th_code = models.CharField(max_length=200)
    th_status=models.CharField(max_length=1,default=0)

我的看法:

class SalTransactions(TemplateView):
    template_name = "wstore/sales_transactions.html"
    def get_context_data(self, **kwargs):
        context = {}
        if  kwargs['post']=='UNPOSTED':
            context['transactions'] =          
               TransHeader.objects.filter(th_type=kwargs['transtype'])
               .filter(th_status='0')
        else:
      
            context['transactions'] = 
            TransHeader.objects.filter(th_type=kwargs['transtype'])
        return context

我的网址行:

 path('saltransactions/<str:transtype>/<str:post>',views.SalTransactions.as_view(), name='saltransactions'),

我的菜单链接工作正常,显示给定 trans 类型的所有记录:

  <a class="nav-link" href="{% url 'saltransactions' transtype='INV' post='ALL' %}">Sales</a>

<a class="nav-link" href="{% url 'saltransactions' transtype='ADJ' post='ALL' %}">Stock Adjustment</a>

但是当我过滤以显示仅具有 th_status='0' 的 rocords 时,我在模板中使用以下链接:

 <a href="{% url 'saltransactions'  transtype=?????"  post='UNPOSTED' %}" >Unposted</a>

我的问题是如何通过 INV 或 ADJ 从查询集中进行转换。如果我分配 transtype='INV' 它正在过滤两种类型的 INV 查询集。

这样我就可以对所有类型的交易(INV/ADJ)使用一个视图、一个模板

感谢您的帮助

【问题讨论】:

    标签: python django templates filter django-queryset


    【解决方案1】:

    问题是,在您的 get_context_data 中,您正在检查 POST 请求。但是,该链接不是 POST 请求,而是一个简单的 GET 请求。您需要一个实际 POST 数据的表单,如下所示:

    # in your template
    <form method="post" action="/my/url/to/post/to">
       <input type="hidden" name="transtype" value="MY_VALUE" />
       <input type="submit" value="Filter" />
    </form>
    

    另外,在视图中,最好检查self.request.method,如果是POST 或GET 请求。在这两种情况下,您都可以通过self.request.POST 访问数据,它会返回您通过表单发布的数据。对于 GET 请求,您传递到 url 中的任何内容,例如 myurl.com/?transtype=something,都可以通过 self.request.GET 访问。如果您使用 kwargs,它可能无法按预期工作,因为在 kwargs 中可能还有其他调用 post

    你可以在这里阅读它: https://docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpRequest.method https://docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpRequest.POST

    【讨论】:

    • 变量 'post' 在 kwargs 中被重命名为 'posted' 以免与 post 方法混淆。我的问题是如何给 value='INV' 或 'ADJ' FOR value="MY_VALUE"。 from list {transheader.th_type} 简而言之,过滤当前模板上下文数据。
    • 因此,您可以像我展示的那样使用表单来完成,也可以使用 URL 参数,例如 mydomain.com/?parameter=value。您可以轻松地在视图中访问 GET 和 POST 参数,应该有很多关于如何做到这一点的文档。
    猜你喜欢
    • 2023-04-11
    • 2019-05-04
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2020-08-22
    相关资源
    最近更新 更多