【问题标题】:Where am I going wrong about Django Filtering关于 Django 过滤,我在哪里出错了
【发布时间】:2021-10-10 00:02:22
【问题描述】:

我想为我的闪存卡创建一个搜索栏,我想过滤,这是我的 views.py 文件夹,但我编写的代码不起作用。

我的数据库中有单词卡(用于外语记忆的闪存卡)。我希望能够专门在这些卡片中进行搜索,我希望出现属于我在输入中输入的单词的卡片。

这是我在我的 html 页面中的搜索输入:

<div class="input-group">
    <div class="form-outline">
        <input type="text" name="search" class="form-control" />
        <label class="form-label">Search</label>
    </div>
    <button type="button" class="btn btn-primary">
        <i class="fas fa-search"></i>
    </button>
</div>

在这里,我尝试使用“搜索”获取输入中输入的值 过滤器中我的数据库“tr”中卡片的名称


def ingilizce(request):

    if 'search' in request.GET:
        search = request.GET['search']
        words = english.objects.filter(tr=search)

    else:
        words = english.objects.all()

    randomclass = random.choice(
        ['bg-success', 'bg-primary', 'bg-dark', 'bg-warning', 'bg-primary'])

    paginator = Paginator(words, 6) 
    page_number = request.GET.get('page', 1)  

    try:
        page = paginator.page((page_number))
    except: 
        page = paginator.page(1)

    return render(request, 'english.html', {'words': page, 'randomclass': randomclass})

这是我的models.py


from django.db import models


    class english(models.Model):
        tr = models.CharField(max_length=50, verbose_name="tr")
        ing = models.CharField(max_length=50, verbose_name="ing")
    
        def __str__(self):
            return self.tr

urls.py


from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('english', views.ingilizce, name='english'),
    path('addWord', views.addWord, name='add'),
    path('deleteWord/<int:id>', views.deleteWord, name='deleteWord'),
]

【问题讨论】:

  • 嘿@ced3j 不工作是什么意思?你有错误信息吗?您能否举例说明数据库中的内容以及您期望获得的内容?
  • 尝试search = request.GET.get('search', None) 然后if search: ... else: ...
  • 我试图更具描述性
  • 停止服务器并进入控制台:./manage.py shell 并导入英文模型:from .models import english。使用过滤器进行查询。 words = english.objects.filter(tr__icontains='test') ...结果如何?
  • 如果您展示模型会有所帮助...在您看来我也想打印search 并在那里确认它

标签: python django filter


【解决方案1】:

您应该使用in 查询过滤器:-

def ingilizce(request):
search = request.GET.get('search', None)
print("Input search value : {}".format(search)) # for debugging
if search:
    words = english.objects.filter(tr__in=search)
else:
    words = english.objects.all()

您需要使用 JS 调用视图,如下所示:-

var search = document.getElementById("search");
search.addEventListener("keyup", function(event) {
  event.preventDefault();
  if (event.keyCode === 13) {
    var url = '/english/?search='+search.value  // place your url here
    window.open(url, "_self");
  }
});

【讨论】:

  • 我在控制台Input search value : None得到了这个结果
  • 这意味着您的搜索字符串没有到达视图,您使用 GET 或 POST 的哪种方法来提交搜索字符串。您能否分享您的 URL.py 内容和 HTML 表单。
  • 哦,我没有使用任何形式...我添加了我的 urls.py。我也试过在你写完之后给html添加一个表单,但还是不行。 (我尝试了 post 和 get )
  • 因为你没有使用表单,当点击按钮时,什么都不会进入视图。如果您不想使用表单,那么您需要使用 javascript 来调用您的视图。
猜你喜欢
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 2013-12-25
  • 2016-08-02
  • 1970-01-01
  • 2022-01-17
  • 2015-03-13
相关资源
最近更新 更多