Чтобы создать рабочий лист заранее, вам нужно добавить созданный лист в файл 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
, и поэтому ее необходимо добавить туда.
Параметр blank
используется в валидации формы, а null
используется при записи в базу данных.
Таким образом, вы можете добавить null=True
в это поле.
EDIT: продолжить комментарий
Рассмотрение двух шагов при сохранении объекта:
blank
) 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
, которая запутывает (и может вызывать ошибки).
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
blank = True
всегда использоватьnull = True
? Почему я не могу выбрать пустое место в моей форме? Я использовалblank = True
. – Benjamin Toueg 16 May 2013 в 14:49assigned_to==None
передал валидатор формы, но не базу данных. Безnull=True
вы не можете записатьNone
в базу данных. Таким образом, в общем случае, если вы хотите необязательное поле, установите для параметраblank
иnull
значениеTrue
. – user1034937 16 May 2013 в 15:11default
и строковые поля. (Я хотел бы добавить после публикации, а не здесь, комментарий.) – user1034937 16 May 2013 в 15:14null
также может влиять на поведение позади ограничений DB (см. code.djangoproject.com/ticket/12708 ). – rtpg 6 October 2014 в 08:20blank and null
– Cheney 25 June 2018 в 02:28