Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 6, 2013 15:59:45

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

invalid literal for int() with base 10

Есть модель абонента , создал форму , сохраняю абонента в базу выскакивает ошибка invalid literal for int() with base 10: '' , выяснилось что появляется она из за квартиры kv в модели указан тип IntegerField , если я заполняю поле квартира то запись успешно сохраняется !? но я же указал blank=True,null=True ! то есть поле может быть пустым ! да и в админ панели если я пропускаю квартиру то запись успешно добавляется в базу , помогите где копать :|

class traide_abonbase(models.Model):
    lic = models.IntegerField(max_length=5,verbose_name="Лицевой счет")
    fio = models.CharField(max_length=50,verbose_name="Ф.И.О")
    ip = models.CharField(max_length=15,verbose_name="IP адресс")
    tel = models.CharField(max_length=15,blank=True,null=True,verbose_name="Телефон")
    ulica = models.CharField(max_length=20,verbose_name="Улица")
    dom = models.IntegerField(max_length=2,verbose_name="Дом")
    lit = models.CharField(max_length=1,blank=True,null=True,verbose_name="Лит.")
    kv = models.IntegerField(max_length=3,blank=True,null=True,verbose_name="Квартира")
    speed = models.ForeignKey("speed",related_name="Тариф",blank=True,null=True,verbose_name="Тарифный план")
    abonisoff = models.BooleanField(default=False,blank=True,verbose_name="Отключен абонент ?")
    notes = models.TextField(max_length=400,verbose_name='Заметки',blank=True,null=True)
занесение абонента в базу
def abon_add(request):
    licq = request.POST['lic']
    fioq = request.POST['fio']
    ipq = request.POST['ip']
    telq = request.POST['tel']
    ulicaq = request.POST['ulica']
    domq = request.POST['dom']
    litq = request.POST['lit']
    kvq = request.POST['kv']
    select01q = request.POST['select01']
    proverkaq = str(request.POST['proverkas'])
    textareaq = request.POST['textarea']
    objektspeed = speed.objects.get(speednote__icontains=select01q)
    p1 = traide_abonbase (lic = licq, fio = fioq, ip = ipq, tel = telq, ulica = ulicaq, dom = domq, lit = litq, kv = kvq, speed = objektspeed, abonisoff = int(proverkaq),notes = textareaq)
    p1.save()
    return redirect('/abon/')



Офлайн

#2 Июнь 6, 2013 16:12:13

hulygun
Зарегистрирован: 2012-08-25
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

invalid literal for int() with base 10

Зачем int для boolean?
Что Вы собираетесь сохранять в boolean?
boolean может принимать только 2 значения True и False
Сделайте проверку сначала:

if request.POST.get['proverkas'] == 'Значение':
    result = True
else:
    result = False

и уже потом сохраняйте … abonisoff = result …

Отредактировано hulygun (Июнь 6, 2013 16:18:09)

Офлайн

#3 Июнь 6, 2013 16:33:33

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

invalid literal for int() with base 10

Не понял :)

ну integer-м лучше описывать квартиры чем boolean 12 или 69 лучше чем True и False :)

proverkas это переменная которая содержит скорость абонента она сравнивается в шаблоне но это в другом месте.
Проблема вот в этом kv = kvq ,пустой параметр POST который приходит имеет тип unicode , даже если конвертируешь все int-м параметр не возможно записать появляется ошибка описанная выше.
Если перезадать вопрос , как можно записать пустую переменную в integer поле ?



Офлайн

#4 Июнь 6, 2013 17:07:57

hulygun
Зарегистрирован: 2012-08-25
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

invalid literal for int() with base 10

Jeck290
ну integer-м лучше описывать квартиры чем boolean 12 или 69 лучше чем True и False
Jeck290
abonisoff = int(proverkaq)
Jeck290
abonisoff = models.BooleanField(default=False,blank=True,verbose_name=“Отключен абонент ?”)
Я к этому
Jeck290
Если перезадать вопрос , как можно записать пустую переменную в integer поле ?
p1 = traide_abonbase (lic = licq, fio = fioq, ip = ipq, tel = telq, ulica = ulicaq, dom = domq, lit = litq, speed = objektspeed, abonisoff = int(proverkaq),notes = textareaq)
if kvq:
    p1.kv = kvq 
p1.save()

Офлайн

#5 Июнь 6, 2013 17:30:19

Jeck290
От:
Зарегистрирован: 2010-01-03
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

invalid literal for int() with base 10

помогло , спасибо



Офлайн

#6 Июнь 7, 2013 10:02:57

hulygun
Зарегистрирован: 2012-08-25
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

invalid literal for int() with base 10

>>>base class view)))
class based views

Отредактировано FishHook (Июнь 7, 2013 10:04:34)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version