Найти - Пользователи
Полная версия: invalid literal for int() with base 10
Начало » Django » invalid literal for int() with base 10
1
Jeck290
Есть модель абонента , создал форму , сохраняю абонента в базу выскакивает ошибка 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/')
hulygun
Зачем int для boolean?
Что Вы собираетесь сохранять в boolean?
boolean может принимать только 2 значения True и False
Сделайте проверку сначала:
if request.POST.get['proverkas'] == 'Значение':
    result = True
else:
    result = False

и уже потом сохраняйте … abonisoff = result …
Jeck290
Не понял :)

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

proverkas это переменная которая содержит скорость абонента она сравнивается в шаблоне но это в другом месте.
Проблема вот в этом kv = kvq ,пустой параметр POST который приходит имеет тип unicode , даже если конвертируешь все int-м параметр не возможно записать появляется ошибка описанная выше.
Если перезадать вопрос , как можно записать пустую переменную в integer поле ?
hulygun
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()
Jeck290
помогло , спасибо
hulygun
>>>base class view)))
class based views
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB