Это может дать вам все пробелы в вашей таблице
var nums= (new List (){1,2,3,25,4,5,6,7,8, 12, 15,21,22,23}).AsQueryable();
nums
.OrderBy(x => x)
.GroupJoin(nums, n=> n + 1, ni => ni, (o,i)=> new {o, i})
.Where(t=> !(t.i is IGrouping))
.Dump();
. Это можно сделать, переопределив определение поля в ModelForm:
class MyModelForm(forms.ModelForm):
boolfield = forms.TypedChoiceField(
coerce=lambda x: x == 'True',
choices=((False, 'False'), (True, 'True')),
widget=forms.RadioSelect
)
class Meta:
model = MyModel
Также помните, что MySQL использует tinyint для Boolean, поэтому True / False фактически равны 1/0. Я использовал эту функцию принуждения:
def boolean_coerce(value):
# value is received as a unicode string
if str(value).lower() in ( '1', 'true' ):
return True
elif str(value).lower() in ( '0', 'false' ):
return False
return None
Немного изменив ответ Дэниела Роузмана, вы могли бы кратко исправить ошибку bool ("False") = True, просто используя ints:
class MyModelForm(forms.ModelForm):
boolfield = forms.TypedChoiceField(coerce=lambda x: bool(int(x)),
choices=((0, 'False'), (1, 'True')),
widget=forms.RadioSelect
)
class Meta:
model = MyModel
Вот функция быстрого и грязного принуждения с использованием лямбда, которая позволяет обойти проблему «False» -> True:
...
boolfield = forms.TypedChoiceField(coerce=lambda x: x and (x.lower() != 'false'),
...