【问题标题】:Django, I want to take an input from a form and contents of the template should be according to the inputDjango,我想从表单中获取输入,模板的内容应该根据输入
【发布时间】:2017-11-21 06:13:13
【问题描述】:

models.py

class Transaction(models.Model):
    created_date = models.DateField('created_date')
    price = models.IntegerField(default=0)
    abc = models.IntegerField(default=0)
    pqr = models.IntegerField(default=0)
    ghi = models.IntegerField(default=0)

然后我接受用户输入

input.html

<form method="POST" action="search/" style="margin-left:5em;">
    {% csrf_token %}
  <input type="radio" name="account" value="price"> price<br>
  <input type="radio" name="account" value="abc"> abc<br>
  <input type="radio" name="account" value="pqr"> pqr<br>
  <input type="radio" name="account" value="ghi"> ghi<br>
</form>

观看次数。 py

def search(request):
    if request.method == 'POST':
        search_id = request.POST.get("account", None)
        selected_transactions = Transaction.objects.exclude(search_id=0)
        return render(request, 'stats/account_details.html', {'selected_transactions': selected_transactions,
                                                              'search_id': search_id})
    else:
        return render(request, 'stats/index.html')

我必须根据用户输入显示内容。

account_details.html

<table>
        <tr>
        <th>Transaction date</th>
        <th>{{ search_id }}</th>
      </tr>
    {% for transaction in selected_transactions %}
      <tr>
        <td>{{ transaction.created_date }}</td>
        <td>{{ transaction.{{ search_id }} }}</td>
      </tr>
    {% endfor %}

</table>

我有两个问题。

1.Transaction.objects.exclude(search_id=0) 不起作用。它不采用变量 search_id 的值。如何动态排除用户输入属性=0 的那些交易?

account_details.html 中的

2.{{ transaction.{{ search_id }} }} 不起作用,因为它是语法错误。我需要显示因用户输入而异的数据。如何在模板的单个标签内使用两个变量?

我知道我可以使用 if else 语句来解决这两个问题,但我有一个很大的不。的属性。那么,有没有更短的方法呢?

感谢任何帮助。

【问题讨论】:

  • 你的模型Transaction没有search_id字段,那怎么办??
  • 例如,如果我在表单中选择“abc”,则不会通过 view.py 中的 search_id = request.POST.get("account", None) 将变量 search_id 分配给 'abc' ?
  • 是的,但这是如何工作的,Transaction.objects.exclude(search_id=0)?? manager 方法仅将字段名称作为关键字参数...请查看 django 中的查询集和查询方法!
  • 我明白了。有没有办法让这个关键字参数成为动态的?

标签: django django-templates


【解决方案1】:

问题 1:您试图在查询集过滤器中使用模型中不存在的属性。您可能想要使用模型的任何属性,例如价格或任何其他属性。

问题2:代码如下:

<td>{{ transaction.created_date }}</td>
<td>{{ transaction.{{ search_id }} }}</td>

由于各种原因不正确。您尝试访问查询集属性中不存在的 created_date 属性的第一件事。您必须删除此属性或将其添加到模型中。您的第二行不正确,因为它是语法错误。下面的一个可能对您有帮助,而且语法正确。

<td> {{ search_id }} </td>

编辑:你可以把 if else 来比较用户选择了哪个search_id,并根据该数据可以显示相应的数据。

{% if search_id == "abc" %}
    {{ transaction.abc }}
{% elif search_id == "pqr" %}
    {{ transaction.pqr }}
{% endif %}

【讨论】:

  • {{ search_id }} 没有解决目的。在我的情况下,用户可以选择“abc”或“pqr”,我需要分别显示 transaction.abc 或 transaction.pqr。
  • 如果是这样,那么放一个 if else。你想更新 if else 的答案吗
  • 是的,请。那会很有帮助。
  • 感谢 Arpit。没有更短的方法吗,以防万一我没有。属性?
  • 如果你的属性比我建议的多,不要依赖模板,在循环视图中使用相同的逻辑,并在上下文中将适当的数据发送到模板
猜你喜欢
  • 1970-01-01
  • 2018-01-17
  • 2011-10-24
  • 2021-04-01
  • 2023-04-04
  • 2015-01-28
  • 1970-01-01
  • 2017-02-21
  • 1970-01-01
相关资源
最近更新 更多