Больше перезаписи стиля Ruby версия Ruby Hal:
class String
def palindrome?
(test = gsub(/[^A-Za-z]/, '').downcase) == test.reverse
end
end
Теперь можно звонить palindrome?
на любой строке.
Я ' Мы нашли решение, которое работает так, как я хочу, без нарушения принципа DRY. Не очень чисто, но, полагаю, придется.
Согласно , в документации варианты выбора не обязательно должны быть кортежами:
Наконец, обратите внимание, что варианты могут быть любыми итерируемый объект - не обязательно список или кортеж. Это позволяет вам построить выбор динамически. Но если ты найдешь вы взламываете выбор быть динамичный, тебе, наверное, лучше используя правильную таблицу базы данных с Внешний ключ. выбор предназначен для статические данные, которые не сильно меняются, если когда-либо.
Итак, решение, которое я выберу на данный момент:
COMPETITION_TYPE_CHOICES = [
(1, 'Olympic Games'),
(2, 'ISU Championships'),
(3, 'Grand Prix Series'),
]
COMP_TYPE_CHOICES_AND_EMPTY = [('','All')] + COMPETITION_TYPE_CHOICES
А затем:
class CompetitionSearchForm(forms.Form):
name = forms.CharField(required=False)
type = forms.ChoiceField(choices=COMP_TYPE_CHOICES_AND_EMPTY, required=False)
Модель остается такой же, как была.
Попробуйте добавить blank = True
к полям модели (при условии, что это желаемое поведение), затем измените форму на ModelForm и удалите определения полей. Обратите внимание, что любые поля, для которых вы установили blank = True
, не потребуются при проверке или сохранении модели. Опять же, это может быть не то, что вам нужно, но если это так, это позволит Django позаботиться о некоторых вещах автоматически.
В противном случае просто измените свой COMPETITION_TYPE_CHOICES
на:
COMPETITION_TYPE_CHOICES = (
('', '---------'),
('1', 'Olympic Games'),
('2', 'ISU Championships'),
('3', 'Grand Prix Series'),
)
Лучше обновить выбор полей в форме init method
COMPETITION_TYPE_CHOICES = (
(1, 'Olympic Games'),
(2, 'ISU Championships'),
(3, 'Grand Prix Series'),
)
class CompetitionSearchForm(forms.Form):
name = forms.CharField(required=False)
type = forms.ChoiceField(choices=COMPETITION_TYPE_CHOICES,required=False)
def __init__(self, *args, **kwargs):
super(CompetitionSearchForm, self).__init__(*args, **kwargs)
self.fields['type'].choices.insert(0, ('','---------' ) )