null значение в столбце & ldquo; content_type_id & rdquo; нарушает непустое ограничение [дубликат]

Чтобы создать рабочий лист заранее, вам нужно добавить созданный лист в файл sheets:

writer.sheets['Validation'] = worksheet

Используя исходный код:

# Creating Excel Writer Object from Pandas  
writer = pd.ExcelWriter('test.xlsx',engine='xlsxwriter')   
workbook=writer.book
worksheet=workbook.add_worksheet('Validation')
writer.sheets['Validation'] = worksheet
df.to_excel(writer,sheet_name='Validation',startrow=0 , startcol=0)   
another_df.to_excel(writer,sheet_name='Validation',startrow=20, startcol=0) 

Пояснение

Если мы посмотрим на функцию панды to_excel, она использует функцию write_cells автора sheets:

excel_writer.write_cells(formatted_cells, sheet_name, startrow=startrow, startcol=startcol)

функция write_cells для xlsxwriter:

def write_cells(self, cells, sheet_name=None, startrow=0, startcol=0):
    # Write the frame cells using xlsxwriter.
    sheet_name = self._get_sheet_name(sheet_name)
    if sheet_name in self.sheets:
        wks = self.sheets[sheet_name]
    else:
        wks = self.book.add_worksheet(sheet_name)
        self.sheets[sheet_name] = wks

Здесь мы видим, что она проверяет sheet_name в self.sheets, и поэтому ее необходимо добавить туда.

20
задан Benjamin Toueg 16 May 2013 в 14:40
поделиться

2 ответа

Параметр blank используется в валидации формы, а null используется при записи в базу данных.

Таким образом, вы можете добавить null=True в это поле.

EDIT: продолжить комментарий

Рассмотрение двух шагов при сохранении объекта:

  1. Validator (контролируется blank)
  2. Ограничение базы данных ( null)

Для опции default возьмите IntegerField, например, default=5, blank=True, null=False, pass (1), даже если вы не присвоили значение (имеющее blank=True), передать (2), поскольку оно имеет значение по умолчанию (5) и записывает 5 вместо None в DB. blank=True, null=False, которые проходят (1), но не (2), потому что он пытается записать None в DB.

Таким образом, если вы хотите сделать поле необязательным, используйте либо default=SOMETHING, blank=True, null=False, либо blank=True, null=True.

Другим исключением является строковое поле, например CharField. Предполагается, что использовать только blank=True, оставив null=False позади. Это делает поле строкой (> = 1 char (s)) или пустую строку ('', с len () == 0) и никогда None.

Причина в том, что когда установлено null=True, будет существовать два возможных значения для состояния «unset»: пустая строка и None, которая запутывает (и может вызывать ошибки).

59
ответ дан user1034937 22 August 2018 в 19:38
поделиться
  • 1
    Что означает blank = True всегда использовать null = True? Почему я не могу выбрать пустое место в моей форме? Я использовал blank = True. – Benjamin Toueg 16 May 2013 в 14:49
  • 2
    assigned_to==None передал валидатор формы, но не базу данных. Без null=True вы не можете записать None в базу данных. Таким образом, в общем случае, если вы хотите необязательное поле, установите для параметра blank и null значение True. – user1034937 16 May 2013 в 15:11
  • 3
    Однако есть два исключения: опция default и строковые поля. (Я хотел бы добавить после публикации, а не здесь, комментарий.) – user1034937 16 May 2013 в 15:14
  • 4
    Я хотел бы отметить, что null также может влиять на поведение позади ограничений DB (см. code.djangoproject.com/ticket/12708 ). – rtpg 6 October 2014 в 08:20
  • 5
    Эта ссылка будет полезна для blank and null – Cheney 25 June 2018 в 02:28

ForeignKey допускает нулевые значения, если это задано. Ваш код будет выглядеть так:

class Mission(models.Model):
    assigned_to = models.ForeignKey('auth.User', related_name='missions_assigned',blank = True,null=True)

Вы должны записать null = True Примечание: после изменения модели вам нужно запустить python manage.py makemigrations yourappname, а затем python manage.py migrate

1
ответ дан Marc 22 August 2018 в 19:38
поделиться
Другие вопросы по тегам:

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