Другим вариантом будет использование набора примитивов из Eclipse Collections . Вы можете легко преобразовать int[]
в MutableIntSet
в Set
или Integer[]
, как показано ниже, или вы можете использовать MutableIntSet
как есть, что будет намного более эффективным в использовании и производительностью памяти.
int[] a = {1, 2, 3};
MutableIntSet intSet = IntSets.mutable.with(a);
Set integerSet = intSet.collect(i -> i); // auto-boxing
Integer[] integerArray = integerSet.toArray(new Integer[]{});
Если вы хотите перейти непосредственно из массива int в массив Integer и сохранить порядок, то это сработает.
Integer[] integers =
IntLists.mutable.with(a).collect(i -> i).toArray(new Integer[]{});
Примечание: я являюсь коммиттером для Eclipse Collections
Спасибо gpilotino за то, что подтолкнули меня в правильном направлении для
Я заметил, что в коде вопроса используется дата и время, чтобы определить, когда он действует. Поэтому я использовал DateFieldFilterSpec и разделил его на подклассы.
from django.db import models
from django.contrib.admin.filterspecs import FilterSpec, ChoicesFilterSpec,DateFieldFilterSpec
from django.utils.encoding import smart_unicode
from django.utils.translation import ugettext as _
from datetime import datetime
class IsLiveFilterSpec(DateFieldFilterSpec):
"""
Adds filtering by future and previous values in the admin
filter sidebar. Set the is_live_filter filter in the model field attribute
'is_live_filter'. my_model_field.is_live_filter = True
"""
def __init__(self, f, request, params, model, model_admin):
super(IsLiveFilterSpec, self).__init__(f, request, params, model,
model_admin)
today = datetime.now()
self.links = (
(_('Any'), {}),
(_('Yes'), {'%s__lte' % self.field.name: str(today),
}),
(_('No'), {'%s__gte' % self.field.name: str(today),
}),
)
def title(self):
return "Is Live"
# registering the filter
FilterSpec.filter_specs.insert(0, (lambda f: getattr(f, 'is_live_filter', False),
IsLiveFilterSpec))
Для использования вы можете поместить приведенный выше код в файл filters.py и импортировать его в модель, в которую вы хотите добавить фильтр
К сожалению, вы не можете. В настоящее время элементы, не являющиеся полями, не могут использоваться в качестве записей list_filter.
Обратите внимание, что ваш класс администратора не работал бы, даже если бы это было поле, поскольку для кортежа из одного элемента требуется запятая: ('is_live' ,)
вы должны написать собственный FilterSpec (нигде не документированный). Вот пример: