Форум сайта python.su
Есть модель абонента , создал форму , сохраняю абонента в базу выскакивает ошибка 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/')
Офлайн
Зачем int для boolean?
Что Вы собираетесь сохранять в boolean?
boolean может принимать только 2 значения True и False
Сделайте проверку сначала:
if request.POST.get['proverkas'] == 'Значение': result = True else: result = False
Отредактировано hulygun (Июнь 6, 2013 16:18:09)
Офлайн
Не понял :)
ну integer-м лучше описывать квартиры чем boolean 12 или 69 лучше чем True и False :)
proverkas это переменная которая содержит скорость абонента она сравнивается в шаблоне но это в другом месте.
Проблема вот в этом kv = kvq ,пустой параметр POST который приходит имеет тип unicode , даже если конвертируешь все int-м параметр не возможно записать появляется ошибка описанная выше.
Если перезадать вопрос , как можно записать пустую переменную в integer поле ?
Офлайн
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()
Офлайн
помогло , спасибо
Офлайн
>>>base class view)))
class based views
Отредактировано FishHook (Июнь 7, 2013 10:04:34)
Офлайн