我使用const sortBy = fn => (a, b) => -(fn(a) < fn(b)) || +(fn(a) > fn(b))
const sort = o => Object.entries(o)
.map(([k, sign]) => [sortBy(({ [k]: v }) => v), sign])
.map(([f, sign]) => (a, b) => f(a, b) * sign)
.reduce((f, g) => (a, b) => f(a, b) || g(a, b))
const mySort = sort({ name: 1, height: -1 })
const data = [{ name: 'b', height: 5 }, { name: 'a', height: 6 }, { name: 'a', height: 4 }, { name: 'b', height: 3 }]
console.log(data.sort(mySort))
来过滤django-filter
查询集。 Article
有一个字段Article
:
locations
我按字段locations = models.ManyToManyField('locations.Location', related_name='articles')
过滤Articles
,作为小部件,我使用locations
小部件django-autocomplete-light
。
Select2Multiple
当我单击“提交”时,它会正确显示过滤后的结果,URL查询字符串包含所有过滤后的属性,包括示例class ArticleFilter(django_filters.FilterSet):
from locations.models import Location
...
locations = django_filters.ModelMultipleChoiceFilter(method='locations_filter',queryset=Location.objects.all(),label='Lokality')
...
class Meta:
model = Article
fields = ['locations','title','price_lte','price_gte','price_currency'
]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# HERE I SPECIFY THE DAL WIDGET
self.form.fields['locations'].widget = autocomplete.Select2Multiple(url="locations:locations_autocomplete")
,但不会显示locations=45
,其中location
是初始id=45
字段的值。
奇怪的是,如果我删除了该小部件,我可以看到最初具有初始值:
locations
不会显示,而位置的值为Select2
。
我在原始undefinfed
上使用了相同的方法,并且可以正常工作。缩写。
您知道问题出在哪里吗?