Django管理过滤器,在模板中添加两个字段

时间:2018-04-20 08:28:31

标签: django django-admin

我想创建一个过滤器以获得一些值范围。在那里我希望得到2个数字到parameter_name,因为我添加了2个数字字段。像贝娄图像。

enter image description here

如果我只使用一个字段,则可以获得该字段的值。作为value = self.value()

<input type="number" step="0.1" max="0.9" min="0.1" id="IsWithinRange" name="IsWithinRange">

但我需要这两个值,所以添加了另一个字段,然后它们的值可以得到。 self.value()始终为非。 现在我无法弄清楚如何将此值传递给我的过滤器。任何人都可以指引我走正确的道路。

1 个答案:

答案 0 :(得分:1)

这可能不是确切的答案。但使用它你可能能够满足要求 ※如果有多个输入字段,Django过滤器将无法正常工作。因此,每个过滤器必须使用一个输入字段 (使用Jquery滑块选择范围而不是使用两个输入字段)

Python类

class IsWithinRangeFilter(admin.SimpleListFilter):

title = 'Title'
parameter_name = 'scoreRange'
template = '[path]/input_filter.html'

def lookups(self, request, model_admin):
    return (
        ('Yes', 'Yes'),
    )

def queryset(self, request, queryset):

    value = self.value()
    try:
        if value:

            #do whatever

    except Exception as e:
        logger.info('#####ERROR{}' .format(e))

    return queryset

调用过滤器类

list_filter = (IsWithinRangeFilter,)

input_filter.html

&#13;
&#13;
{% load i18n %}

<link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" />
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script type="text/javascript" src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<script>
    var lowerRange = 5;
    var upperRange = 8;   

    $( function() {
      $( "#slider-range" ).slider({
        range: true,
        min: 0,
        max: 10,
        values: [ lowerRange, upperRange ],
        slide: function( event, ui ) {
            if(ui.values[ 0 ] === ui.values[ 1 ])
            {
                return false;
            }
            $( "#scoreRange" ).val( ui.values[ 0 ]/10 + " - " + ui.values[ 1 ]/10 );
        }
      });
      $( "#scoreRange" ).val( $( "#slider-range" ).slider( "values", 0 ) / 10 +
        " - " + $( "#slider-range" ).slider( "values", 1 ) / 10 );
    } );
    
</script>

{% block content %}
<h3>{% Any Title %}</h3>

<ul>
    <li>
        <form>
            <p>
                <label >Any Description</label>
                <div id="slider-range"></div>
                <label style="font-weight: bold;">Filter:</label><input type="submit" id="scoreRange" name="scoreRange" style="margin:5px; text-align:center; background-color:#79aec8; cursor:pointer; border:0; color:#f7f5f3; font-weight:bold;">
            </p>            
        </form>
    </li>
</ul>
{% endblock %}
&#13;
&#13;
&#13;

希望这会有所帮助!!!