Администратор django, сохраняющий в строке с пустым значением - PullRequest
1 голос
/ 21 ноября 2011

У меня есть две модели как

class Employer(models.Model):
..
..


class JobTitle(models.Model):
    type = models.IntegerField(null=False, choices=JobTitles.CHOICES,blank=True,default=0)
    employer = models.OneToOneField(Employer,unique=True,null=False)  

Я определил admin для Employer и определил JobTitle как встроенный класс.

Однако при сохранении объекта Employer без выбора JobTitle возникает ошибка invalid literal for int() with base 10: '' из-за поля type в JobTitle.

Я хотел быустановить type в 0, как я определил по умолчанию = 0, если я не выберу название работы при сохранении работодателя.

Как мне этого добиться?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2011

Для Model аргументов default используется, когда Django сохраняет ваши данные в базе данных ...

С другой стороны, ваша ошибка возникает во время анализа данных.Когда вы отправляете свою форму, django анализирует данные соответствующего типа, если это необходимо.Когда ваша HTML-форма отправлена, django получает строковые данные, такие как

{'title':'12', 'employer_id':'23'...}

Итак, django должен проанализировать type в ineger, прежде чем сохранить его в базу данных ...nullstring '' , int('') просто завершается с ошибкой TypeError.

То, что вы должны сделать, это удалить blank=True.Или каким-то образом вы должны переопределить поведение по умолчанию для значения в комбобоксе и установить его 0 вместо '' .

0 голосов
/ 21 ноября 2011

Итак, я понял это из кода, который вы разместили, но я думаю, что вы смешиваете стратегии здесь.Исходя из того, как вы сформулировали свой вопрос, я предполагаю, что вы хотите, чтобы я мог написать должность без указания типа.Кроме того, вы хотите, чтобы один тип работы был выбран по умолчанию.Далее я делаю вывод, что, хотя сейчас я немного растягиваюсь, у вас есть собственный выбор «без типа» (вы не показали нам свой JobTitles.CHOICES кортеж, поэтому я должен догадаться), который соответствует значению 0, котороеВы установили значение по умолчанию.

Если вы хотите иметь тип задания по умолчанию (даже если вы называете его «Без типа задания» или что-то подобное), вы должны установить его, используя default аргумент ключевого слова (как вы сделали) и , вам следует установить null=False и blank=False (альтернативно, пропустите оба, так как это значения по умолчанию).

Однако, если выЕсли возможно, что существует заголовок задания без типа, тогда, если в вашей реализации нет какой-либо причины делать что-то еще, самый простой способ представить это в данных - это использовать значение null SQL.Если вы хотите пойти по этому пути, правильный способ сделать это - установить blank=True и null=True, а затем либо установить default=None, либо полностью пропустить этот аргумент ключевого слова.

Это должно заставить вас вести себя так, как вы ищете.

...