显示包含特定值的模型(基本搜索)

时间:2014-03-13 12:08:57

标签: django django-models django-forms django-views

我必须首先说我是Django的新手(Python我知道:))。

让我告诉你到目前为止我有什么,然后我会讨论这个问题。

model

class Machine(models.Model):
    name = models.CharField(max_length=255, primary_key=True)
    user = models.CharField(max_length=255)
    mail = models.CharField(max_length=255)
    datetime = models.DateTimeField(blank=True, null=True, default="")
    licenses = models.CharField(max_length=10000, blank=True, null=True, default="")

view

def home(request):
    ...
    return render_to_response("inventory/home.html", {'machines': Machine.objects.all()})

这是我HTML的一部分:

<fieldset class="module aligned ">
    <div class="form-row field-name">
        <div>
            <label class="required" for="id_name">License:</label>
            <input class="vTextField" id="id_license" maxlength="255" name="license" type="text" value="">
        </div>
    </div>
</fieldset>


<div class=results>
    <table width="100%" border="1" cellpadding="4"  cellspacing="0" bordercolor="#eeeeee">
        <tr bgcolor='WhiteSmoke' style="color: 'black'">
            <td><input type="checkbox" id="action-toggle" style="display: inline-block;"></td>
            <td>Name</td>
            <td>User</td>
            <td>Mail</td>
            <td>Registration date</td>
            <td>Registered licenses</td>
        </tr>

        {% for machine in machines %}
            {% if machine.datetime %}
        <tr bgcolor='CCFF66'>
            {% else %}
        <tr bgcolor='FF6666'>
            {% endif %}

            <td class="action-checkbox">
                <input class="action-select" name="_selected_action" type="checkbox" value="{{machine.name}}">
            </td>
            <td>{{ machine.name }}</td>
            <td>{{ machine.user }}</td>
            <td>{{ machine.mail }}</td>
            <td>{{ machine.datetime|default:"N/A" }}</td>
            <td>{{ machine.licenses|default:"N/A"|truncatewords:"5" }}</td>

        </tr>
        {% endfor %}
    </table>
</div>

结果如下: enter image description here

如上所示,目前正在显示所有项目(称为计算机),但我想仅显示具有特定许可文本的计算机

所以用户用户开始输入“许可证搜索字段”时,只会显示带有该许可证的项目(我希望我能够很好地解释这个问题)。

此时我真的不知道从哪里开始寻找!我检查了一些django教程,但他们没有进入的东西也许这个先进!

1 个答案:

答案 0 :(得分:1)

您可以在服务器端执行搜索,按照以下步骤进行操作

  1. License搜索框放入HTML表单,然后在其旁边添加一个提交按钮。
  2. 在提交调用时,将获得在“许可证”中输入的值的视图。文本框。
  3. 在表格上执行过滤器
  4. 返回结果。
  5. HTML的第一部分将更改为 -

    <fieldset class="module aligned ">
        <div class="form-row field-name">
            <div>
                <form method="post">
                    <label class="required" for="id_name">License:</label>
                    <input class="vTextField" id="id_license" maxlength="255" name="license" type="text" value="">
                    <button type="submit">Search</button>
                </form>
            </div>
        </div>
    </fieldset>
    

    视图看起来像这样 -

    def home(request):
        ...
        if request.POST:
            license_text = request.POST.get('license', '')
            machines = Machine.objects.filter(licenses__istartswith=license_text) #or you can use __in operator
        else:
            machines: Machine.objects.all()
    
        return render_to_response("inventory/home.html", {'machines': machines})
    

    无需其他更改。代码未经测试但应该可以使用