用于过滤 Django 列表的下拉选择选项

2024-03-29

来自 Angular,这很容易做到,但我不确定从哪里开始创建一个将从对象列表中过滤的下拉表单。基本上,我有下面的代码,它将拉入并显示所有房地产列表;我想创建一个下拉菜单,其中有两个选择:“精选”和“新列表”,当用户选择其中一个时,列表将过滤掉并仅显示那些匹配的列表。感谢您的帮助。

这是我的模型

from django.db import models
from django.utils import timezone


class Listing(models.Model):
    FAIR = 'FAIR'
    GOOD = 'GOOD'
    VERY_GOOD = 'VERY_GOOD'
    EXCELLENT = 'EXCELLENT'

    NEW_LISTING = 'NEW_LISTING'
    PRICE_REDUCED = 'PRICE_REDUCED'
    UNDER_AGREEMENT = 'UNDER_AGREEMENT'
    SOLD = 'SOLD'

    YES = 'YES'
    NO = 'NO'

    FULL_SERVICE = 'FULL_SERVICE'
    FOR_LEASE = 'FOR_LEASE'
    WITH_REAL = 'WITH_REAL'
    QUICK_SERVE = 'QUICK_SERVE'

    CONDITION_CHOICES = (
        ('FAIR', 'Fair'),
        ('GOOD', 'Good'),
        ('VERY_GOOD', 'Very Good'),
        ('EXCELLENT', 'Excellent'),
    )

    STATUS_CHOICES = (
        ('NEW_LISTING', 'New Listing'),
        ('PRICE_REDUCED', 'Price Reduced'),
        ('UNDER_AGREEMENT', 'Under Agreement'),
        ('SOLD', 'Sold'),
    )

    FEATURED_CHOICES = (
        ('YES', 'Yes'),
        ('NO', 'No'),
    )

    LOCATION_TYPE = (
        ('FULL_SERVICE', 'Full Service'),
        ('FOR_LEASE', 'For Lease'),
        ('WITH_REAL', 'With Real'),
        ('QUICK_SERVE', 'Quick Serve'),
    )

    photo = models.ImageField(upload_to="media/properties/", max_length=250, blank=True, null=True)
    broker = models.ForeignKey('auth.User')
    phone = models.CharField(max_length=20, null=True)
    title = models.CharField(max_length=250, null=True)
    description = models.TextField(null=True)
    concept = models.CharField(max_length=250, null=True)
    location = models.CharField(max_length=250, null=True)
    size = models.CharField(max_length=250, null=True)
    seating = models.CharField(max_length=250, null=True)
    condition_choices = models.CharField(max_length=20, choices=CONDITION_CHOICES, blank=True)
    hours = models.CharField(max_length=250, null=True)
    asking_price = models.CharField(max_length=250, null=True)
    sales_price = models.CharField(max_length=250, null=True)
    rent_price = models.CharField(max_length=250, null=True)
    lease_terms = models.CharField(max_length=250, null=True)
    licenses = models.CharField(max_length=250, null=True)
    parking = models.CharField(max_length=250, null=True)
    status_choices = models.CharField(max_length=20, choices=STATUS_CHOICES, blank=True, null=True)
    featured_choices = models.CharField(max_length=5, choices=FEATURED_CHOICES, blank=True, null=True)
    location_type = models.CharField(max_length=20, choices=LOCATION_TYPE, blank=True, null=True)
    created_date = models.DateTimeField(default=timezone.now, null=True)
    published_date = models.DateTimeField(default=timezone.now, null=True)

    listing_order = models.PositiveIntegerField(default=0, blank=False, null=False)

    class Meta(object):
        ordering = ('listing_order',)

    def publish(self):
        """This is a docstring"""
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

这是我的模板

{% extends "listing/base.html" %}{% load staticfiles %}

{% block content %}

  <section class="listings mt64 mb64">
    <div class="container">
      {% for listing in listings %}
        <div class="row">
          <div class="col-md-4">
            <div class="listings-photo" style="background: #ccc url('{{ MEDIA_URL }}{{ listing.photo.name }}')no-repeat 50% 50%; background-size: cover; width: 350px; height: 220px"></div>
          </div>
          <div class="col-md-8">
            <h3 class="uppercase">{{ listing.title }}</h3>

            <p><span class="listings-title">Description:</span> {{ listing.description }}</p>

            <div class="row">
              <div class="col-md-6">
                <ul>
                  <li><span class="listings-title">Concept:</span> {{ listing.concept }}</li>
                  <li><span class="listings-title">Location:</span> {{ listing.location }}</li>
                  <li><span class="listings-title">Size:</span> {{ listing.size }}</li>
                  <li><span class="listings-title">Seating:</span> {{ listing.seating }}</li>
                  <li><span class="listings-title">Condition:</span> {{ listing.condition_choices }}
                  </li>
                  <li><span class="listings-title">Hours:</span> {{ listing.hours }}</li>
                </ul>
              </div>
              <div class="col-md-6">
                <ul>
                  <li><span class="listings-title">Asking Price:</span> {{ listing.asking_price }}
                  </li>
                  <li><span class="listings-title">Sales:</span> {{ listing.sales_price }}</li>
                  <li><span class="listings-title">Rent:</span> {{ listing.rent_price }}</li>
                  <li><span class="listings-title">Lease Terms:</span> {{ listing.lease_terms }}</li>
                  <li><span class="listings-title">Licenses:</span> {{ listing.licenses }}</li>
                  <li><span class="listings-title">Parking:</span> {{ listing.parking }}</li>
                </ul>
              </div>
            </div>
            <p>For more information please contact {{ user.first_name }} {{ user.last_name }} at {{ listing.phone }}.</p>
          </div>
        </div>
      {% endfor %}
    </div>
  </section>

{% endblock content %}

我从 Angular 明白你的意思。在 Django 中执行此操作的最经典方法是创建一个包含所需所有字段的表单,然后将其传递到视图以处理数据、过滤记录并将它们传递回模板。我将尝试提供一个基本示例,以便您能够理解:

索引.html:

<form action="{% url 'index' %}" method="get">
    <label for="featured">Format</label>
    <select name="featured">
        <option value="Yes" />Yes</option>
        <option value="No" />No</option>
    <input type="submit" name="featured" value="Filter" />
</form>     

Views.py

def index(request, template_name='index.html'):

    if request.GET.get('featured'):
        featured_filter = request.GET.get('featured')
        listings = Listing.objects.filter(featured_choices=featured_filter)
    else:
        listings = Listing.objects.all()

    context_dict = {'listings': listings}
    return render(request, template_name, context_dict)

这是不言自明的。如果 GET 中有“featured”参数,列表将被过滤,否则将传递所有对象。显然,我们正在考虑每个过滤器请求的页面刷新,如果您期望更多的单页体验,则必须采用 ajax 和 post 请求或其他方式。另外,请记住此代码片段只是一个硬编码示例。理想情况下,您需要创建一个 ModelForm 类并实例化它,然后将其传递给模板 - 如果您有更多过滤字段,则可读性和可维护性会更高。如果涉及复杂的过滤,您可能还希望有一个用于过滤目的的附加视图,但这也有效,只是很快就会变得混乱。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于过滤 Django 列表的下拉选择选项 的相关文章

  • Django Rest Auth 自定义密码重置链接

    我已经尝试过针对类似问题找到的解决方案 但没有一个对我有用 我使用的是 Angular 前端 DRF Django Rest Auth 对于确认 url 我能够通过添加看起来像这样的自定义适配器来覆盖它以指向我的前端 class Accou
  • Django - 如何直接从表中的按钮删除对象

    对不起 我的英语不好 我需要删除一个对象 但直接从模板中的对象列表中删除 我有一个工作订单 其中有备件 但我不知道如何仅使用工作订单详细视图中的按钮来创建备件的删除视图 这个想法是用户单击 删除 按钮 这是备件的型号 class Order
  • django 在我的机器上非常慢

    我全新安装了 django 1 0 并提供了一个简单的页面 需要 5 秒才能加载 在我同事的计算机上几乎不需要时间 我使用启动服务器 python manage py testserver 我可以看到每个 GET 请求 PNG 和样式表 大
  • 使用 Django 表单集保存具有唯一属性的多个对象

    TL DR 如何使用表单集保存 验证具有唯一属性的多个对象 假设我有一个Machine其中有多个Settings 参见下面的型号 这些设置在机器内应具有唯一的顺序 这可以通过定义一个来完成unique together属性中的Meta的类别
  • Django:时区问题

    注意 我删除了之前存在的问题 并在此处仅提供相关信息 我们的数据库服务器 RH 指定了 TIME ZONE Europe London 并且 在 Django settings py 中 我们指定 TIME ZONE America New
  • Django 模板如何将数字转换为单词

    我正在寻找一个模板标签来将 522 这样的值转换为 522 查看我遇到的文档 django contrib 人性化 它有一个内置标签 intword 但它只适用于数字大于一百万的数字 作为替代解决方案 我使用以下函数创建了一个标签将数字转换
  • 当我从 Django 应用程序“打印”它们时,它们会去哪里?

    我在 Linux 服务器上有一个 Django 应用程序 在其中一种观点中 某种形式print命令被执行 并打印一些字符串 我怎样才能知道打印的字符串是什么 是否有一些日志保存这些东西 输出应该在 django 启动的终端中 如果你不直接启
  • 嵌套和分段的脆皮布局

    TLDR 问题 如何使用 分段 不确定这是否被视为内联 布局和多个模型 有些相关 有些不相关 制作一个脆脆的表单 我正在尝试理解 Django 中的几件事 表单 表单集 嵌套表单和脆皮 我已经研究了一段时间了 感觉我已经很接近了 只是需要有
  • 从 Django 缓存中删除特定项目?

    我正在使用站点范围的缓存内存缓存 http en wikipedia org wiki Memcached作为后端 当底层数据库对象更改时 我想使缓存中的页面无效 如果页面名称发生更改 那么我将使整个缓存无效 因为它会影响每个页面上的导航
  • 姜戈。 Python 社交身份验证。在管道末端创建配置文件

    我想在身份验证管道的末尾添加一个函数 该函数旨在检查该用户是否有 配置文件 表 如果没有 它将创建一个表 Profiles 模型是一个表 我在其中存储有关用户的一些额外信息 class Profiles models Model user
  • Django - 从单独的应用程序导入视图

    我是 Django 新手 正在阅读 Holovaty 和 Kaplan Moss 所著的 Django Book 我有一个名为 mysite 的项目 其中包含两个名为 books 和 contact 的应用程序 每个都有自己的 view p
  • 南迁:“数据库后端不接受0作为AutoField的值”(mysql)

    我是 django 的新手 并试图将外键返回给受让人和记者的用户 但是当我尝试对 South 应用更改时 我收到错误 ValueError The database backend does not accept 0 as a value
  • Django 外键多对一关系显示在模板上

    我正在尝试显示与公司 多对一 相关的工作机会 但我无法做到这一点 我已经尝试了很多循环 但我什至没有得到查询集 所以我一定做错了 但无法解决我做错的事情 My files 模型 py class Company models Model f
  • AppRegistryNotReady:翻译基础设施无法初始化

    当我尝试访问我的应用程序时 出现以下错误 AppRegistryNotReady 翻译基础设施无法 在应用程序注册表准备好之前初始化 检查你是否没有 在导入时进行非惰性 gettext 调用 这是我的 wsgi py 文件 WSGI con
  • Django 类视图:__init__

    我想要得到
  • Django:以编程方式更改应用程序语言(没有 /i18n/setlang/ view)

    我的情况如下 我正在开发一个多语言网站 目前我使用 Django 视图 i18n setlang 让用户从下拉菜单切换语言 一切正常 但现在 我希望以编程方式设置语言 特别是我有一个带有一系列设置的表单 其中有一个 最喜欢的语言 声音 一旦
  • 在 Django 中使用“.filter().filter().filter()...”有缺点吗?

    以下两个调用是否解析为 Django 中的等效 SQL 查询 链接多个调用 Model objects filter arg1 foo filter arg2 bar 将所有参数包装在一起 Model objects filter arg1
  • 为什么 django-rest-frameworks request.data 有时是不可变的?

    在我宁静的CreateAPIView我变异我的request data字典 有时我会收到测试未捕获的错误 This QueryDict instance is immutable 例如这 class CreateView CreateAPI
  • 如何将焦点设置到 django 表单元素的 CharField

    我的登录页面使用 Django 表单 I want to set focus to the first textField username when the page loads 我尝试使用 Jquery 如下 但没有得到结果 forms
  • Django:从 QueryDict 读取 JSON 对象数组

    如何通过 JS 的 AJAX 调用传递复合 JSON 结构 并在服务器端将其读取为 python 中的 非常相似 的数据结构 我知道可以使用 json 格式 simplejson 等 但我不知何故觉得 QueryDict 本身在我的情况下格

随机推荐

  • 在 FTP 上上传多个文件

    我是 Objective C 和 iOS 的新手 我正在使用 SimpleFTPSample 制作用于将文件上传和下载到 ftp 的测试应用程序 我需要在 ftp 上上传两个文件 但在 SimpleFTPSample 中您只能上传一个 那么
  • Silverlight工具包图表线系列颜色选择

    我正在使用 Silverlight 4 工具包并使用图表控件 特别是线系列 我还使用 Microsoft Silverlight 主题之一 它带有一些图表的默认样式 我知道在 ToolkitStyles xaml 中有大量供图表工具包使用的
  • 在Linux中使用命令行检查单个线程优先级

    我可以通过转到 proc pidof task 并给出来查看应用程序中使用的线程数 猫的状态 有没有办法使用命令检查Linux中各个线程的优先级 Regards Learner 运行 ps m l 它将列出所有线程和特定 PID 的优先级
  • Django视图响应时间问题

    您好 我有很多从查询中获得的对象 查询集尚未评估 当我将对象列表传递给分页器对象时 花了 14 秒才返回分页器对象 这是因为它正在评估列表中的所有对象 这需要时间 可能会击中数据库 在将查询集发送到分页器对象之前 我强制评估了查询集 如下所
  • Spring Integration 链流程 - 处理无效网关调用

    我有一个 Spring 集成流程 其中有一个对网关服务的服务激活器调用 该服务的结果无效并且似乎挂起 它不会继续链的其余部分 我是否需要指定其他内容来表明我不希望网关调用返回结果以继续线程执行 我有一个 void 方法声明 Service
  • 查找Python代码中除法运算符的所有用法

    我想找到我的所有实例python除法运算符的代码 用来 我的第一直觉是使用正则表达式 该表达式需要过滤掉非除法的使用 即路径名 我想出的最好的是 A z0 9 A z0 9 这将找到除法运算符 foo bar foo bar foo bar
  • 启动应用程序(如果已安装),或使用安装引荐来源网址打开 Google Play

    我们正在尝试生成一个链接 当在浏览器中单击该链接时 将打开我们的应用程序 如果已安装 这通常是通过以下方式完成的 intent some domain some parameters Intent scheme somescheme pac
  • jQuery 检查元素是否具有 css 属性

    我需要知道当我单击一个元素时该元素是否具有 CSS 属性 我正在考虑这样的事情 但它不起作用 if element attr text shadow alert i Have else alert i dont 关于这一点有什么建议吗 谢谢
  • 如何将 datetime.date 对象转换为 python 中的 datetime.datetime ? [复制]

    这个问题在这里已经有答案了 可能的重复 将 datetime date 对象转换为 datetime datetime 对象 其中任何缺失的时间属性均为零 https stackoverflow com questions 11192814
  • 在多列中显示单选框列表

    我有一个 php 循环 列出了 50 个单选框 我想在每列上放置 10 个单选框 我试过 div 样式 溢出 隐藏 空白 nowrap 浮动 左 宽度 160px gt 生成代码 php j 0 php foreach from genre
  • 如何使用 IHTTPNegotiate 添加额外的 http 标头?

    如何使用 HTTP Negotiate 向请求添加额外的标头 我添加了接口但功能BeginningTransaction OnResponse永远不会被打电话 TNameSpaceHandler class TComObject IInte
  • 如何获取 Amazon 的 AWS_ACCESS_KEY_ID?

    我对 AWS 完全陌生 我从亚马逊下载了一些示例代码 我需要设置一些常量 AWS ACCESS KEY ID AWS SECRET ACCESS KEY MERCHANT ID MARKETPLACE ID 我刚刚创建了一个 AWS 账户
  • QT 程序包含带有 if-test-then 块的 bash 脚本以及内部问题错误中转义的必要引号

    我正在尝试在 QT 应用程序中运行一个小型 bash 脚本 其中包含 if test then 块以及测试中必要的引号 由于脚本应该由 QT 编译并由 bash 运行 因此引号必须转义两次 因此引号的转义反斜杠也必须转义 正如我所见 不幸的
  • Javascript + HTML - 在后台加载图像(异步?)

    我发现了许多描述 javascript 图像加载的主题 但并不完全是我正在寻找的内容 我目前正在以正常方式加载 html 中的图像 例如 img src images big image jpg 这会导致网页上有空白区域 从上到下填充有加载
  • iOS 6 - 如何获得“释放刷新”动画?就像在邮件中一样?

    在邮件应用程序中 我们现在可以drag the view down and release to refresh 如下图所示 这是我可以从 SDK 获得的标准东西吗 Thanks 使用新的iOS6UIRefreshControl https
  • 如何在 Slim 模板中渲染 HTML

    我正在尝试渲染一个前面带有图标的链接 我在用着Slim https github com stonean slim模板引擎以及引导CSS http twitter github com bootstrap base css html ico
  • 如何模拟数据库故障以进行测试(在 Ruby on Rails 中)

    通过某些监视工具 例如 Monit 通过心跳消息来监视应用程序是一种常见的设置 如果应用程序正在运行并且一切正常 它会返回 我还活着 消息 如果数据库失败或 Web 服务器挂起 它不会返回任何内容或返回内部服务器错误 HTTP 状态代码 5
  • Jupyter 笔记本中的函数单元测试?

    我有一个 Jupyter 笔记本 我打算反复运行 里面有函数 代码结构是这样的 def construct url data return url def scrape url url fetch url extract data retu
  • 在 Cython 中共享扩展类型以实现静态类型

    我将 Python 类转换为 pyx 文件内的扩展类型 我可以在另一个 Cython 模块中创建这个对象 但是我无法进行静态类型处理用它 这是我的课程的一部分 cdef class PatternTree cdef public Patte
  • 用于过滤 Django 列表的下拉选择选项

    来自 Angular 这很容易做到 但我不确定从哪里开始创建一个将从对象列表中过滤的下拉表单 基本上 我有下面的代码 它将拉入并显示所有房地产列表 我想创建一个下拉菜单 其中有两个选择 精选 和 新列表 当用户选择其中一个时 列表将过滤掉并