Django BooleanField как переключатели?

Это может дать вам все пробелы в вашей таблице

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();

.Net Fiddle

56
задан Peter Mortensen 26 January 2010 в 18:36
поделиться

4 ответа

. Это можно сделать, переопределив определение поля в 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
62
ответ дан 26 November 2019 в 16:58
поделиться

Также помните, что 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
3
ответ дан 26 November 2019 в 16:58
поделиться

Немного изменив ответ Дэниела Роузмана, вы могли бы кратко исправить ошибку 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
30
ответ дан 26 November 2019 в 16:58
поделиться

Вот функция быстрого и грязного принуждения с использованием лямбда, которая позволяет обойти проблему «False» -> True:

...
boolfield = forms.TypedChoiceField(coerce=lambda x: x and (x.lower() != 'false'),
...
5
ответ дан 26 November 2019 в 16:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: