【问题标题】:Django validate user input with generic listview filterDjango 使用通用列表视图过滤器验证用户输入
【发布时间】:2017-12-01 12:51:38
【问题描述】:

所以我正在基于通用列表视图制作一个非常简单的过滤器。我使用“GET”从搜索字段/过滤字段中检索用户输入。

我想过滤关于“arrival_date”的数据,models.Delivery 中的一个 DateField。所以这个过滤器有效,但任何给定的数字都会与“arrival_date”的内容进行比较

我想要做的是验证用户输入,它只能包含数字和字符“-”或“/”。除了字符之外,我还想说查询需要至少四位数字才能成为有效输入。

在常规表单中,我会使用“clean_arrival_date”来使用任何验证,但我需要朝着正确的方向推动,以应用此列表视图中所需的相同类型的验证...

感谢您的帮助,

凯文

下面; view.py 包含带有 query_set 的覆盖列表视图

    #views.py    

    """
    Date selector based on ListView
    """

    from django.views.generic import ListView

    from .models import Delivery

    class DeliveryDateListView(ListView):
        model = Delivery
        template_name = 'data/deliveries_by_date.html

        def get_queryset(self):
            # Fetch the queryset from the parent get_queryset
            queryset = super(DeliveryDateListView, self).get_queryset()

            # Get the data GET parameter
            date = self.request.GET.get("date")
            if date:
                # Return a filtered queryset
                return queryset.filter(arrival_date__icontains=date)
            # Return the base queryset
            return queryset

【问题讨论】:

    标签: django validation django-forms django-views django-queryset


    【解决方案1】:

    首先,如果您通过 URL 传递,请阅读此django's url

    然后,如果你在 JS 中使用 Ajax:

    只需检查输入(您可以检查事件键按下或提交时检查)

    我们有很多方法可以做到这一点

    【讨论】:

    • 好吧,我想使用“Django 方式”来验证输入,该字段将包含一个带有 jQ​​uery 的日期选择器,但仍然会有一些用户填写该字段并忽略日期选择器..
    • 所以你必须在提交前检查它。用户不要选择,因此您可以禁用该字段,我们有很多解决方案
    • 当然我们可以禁用该字段,假设我们没有使用日期选择器,没有 js,没有 ajax,只是一个简单的字段来填写日期......你将如何使用验证Django 验证中的构建?
    • Django 仅在服务器中运行。所以传给 Django 的数据应该是正确的。在您的情况下,您想在服务器中检查它,所有...所有表单和 FE(客户端)中的东西,Django 不在乎!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多