Я использую sqlite3, django 2.2 и python 3.7. Я получаю эту ошибку при попытке отправить форму в sqlite3. Буду признателен за любую оказанную помощь. Ниже мой код для модели и формы. Согласно моему коду, мой параметр 0 в БД - пользователь, не понимаю, в чем проблема с типом. Мои миграции обновлены
Модель:
class StaffProfile(TimeStampedModel, models.Model):
"""
StaffProfile model class
Extends auth.User and adds more fields
"""
NOT_KNOWN = '0'
MALE = '1'
FEMALE = '2'
NOT_APPLICABLE = '9'
SEX_CHOICES = (
(NOT_KNOWN, _('Not Known')),
(MALE, _('Male')),
(FEMALE, _('Female')),
(NOT_APPLICABLE, _('Not Applicable'))
)
user = models.OneToOneField(
User, verbose_name=_('User'), on_delete=models.CASCADE)
image = ImageField(upload_to="profile_pics", max_length=255,
verbose_name=_("Profile Image"),
help_text=_("A square image works best"), blank=True)
sex = models.CharField(_('Gender'), choices=SEX_CHOICES, max_length=1,
default=NOT_KNOWN, blank=True, db_index=True)
role = models.ForeignKey(Role, verbose_name=_('Role'), blank=True,
default=None, null=True,
on_delete=models.SET_NULL)
phone = PhoneNumberField(_('Phone'), blank=True, default='')
address = models.TextField(_('Addresss'), blank=True, default="")
birthday = models.DateField(_('Birthday'), blank=True, default=None,
null=True)
leave_days = models.PositiveIntegerField(
_('Leave days'), default=21, blank=True,
help_text=_('Number of leave days allowed in a year.'))
sick_days = models.PositiveIntegerField(
_('Sick days'), default=10, blank=True,
help_text=_('Number of sick days allowed in a year.'))
overtime_allowed = models.BooleanField(
_('Overtime allowed'), blank=True, default=False)
start_date = models.DateField(
_('Start Date'), null=True, default=None, blank=True,
help_text=_('The start date of employment'))
end_date = models.DateField(
_('End Date'), null=True, default=None, blank=True,
help_text=_('The end date of employment'))
data = JSONField(_('Data'), default=dict, blank=True, null=True)
class Meta: # pylint: disable=too-few-public-methods
"""
Meta options for StaffProfile
"""
abstract = False
verbose_name = _('Staff Profile')
verbose_name_plural = _('Staff Profiles')
ordering = ['user__first_name', 'user__last_name', 'user__username',
'created']
def get_name(self):
"""
Returns the staff member's name
"""
# pylint: disable=no-member
return f'{self.user.first_name} {self.user.last_name}'
def get_approved_leave_days(self, year: int = datetime.today().year):
"""
Get approved leave days in the current year
"""
# pylint: disable=no-member
return get_taken_leave_days(
staffprofile=self,
status=Leave.APPROVED,
leave_type=Leave.REGULAR,
start_year=year,
end_year=year
)
def get_approved_sick_days(self, year: int = datetime.today().year):
"""
Get approved leave days in the current year
"""
return get_taken_leave_days(
staffprofile=self,
status=Leave.APPROVED,
leave_type=Leave.SICK,
start_year=year,
end_year=year
)
def get_available_leave_days(self, year: int = datetime.today().year):
"""
Get available leave days
"""
try:
# pylint: disable=no-member
leave_record = AnnualLeave.objects.get(
leave_type=Leave.REGULAR,
staff=self,
year=year)
except AnnualLeave.DoesNotExist:
return Decimal(0)
else:
return leave_record.get_available_leave_days()
def get_available_sick_days(self, year: int = datetime.today().year):
"""
Get available sick days
"""
try:
# pylint: disable=no-member
leave_record = AnnualLeave.objects.get(
leave_type=Leave.SICK,
staff=self,
year=year)
except AnnualLeave.DoesNotExist:
return Decimal(0)
else:
return leave_record.get_available_leave_days()
def __str__(self):
return self.get_name()
def save(self, *args, **kwargs):
super(StaffProfile, self).save(*args, **kwargs)
img = Image.open(self.image.path)
if img.height > 300 or img.width > 300:
output_size = (300, 300)
img.thumbnail(output_size)
img.save(self.image.path)
Форма:
class StaffProfileAdminCreateForm(StaffProfileAdminForm):
"""
Form used when creating new Staff Profiles
"""
user = forms.ModelChoiceField(
label=_('User'), queryset=User.objects.filter(staffprofile=None))
class Meta: # pylint: disable=too-few-public-methods
"""
Class meta options
"""
model = StaffProfile
fields = [
'user',
'first_name',
'last_name',
'id_number',
'image',
'phone',
'sex',
'role',
'nhif',
'nssf',
'pin_number',
'address',
'birthday',
'leave_days',
'sick_days',
'overtime_allowed',
'start_date',
'end_date',
'emergency_contact_name',
'emergency_contact_number',
'emergency_contact_relationship'
]
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request', None)
super().__init__(*args, **kwargs)
if self.instance and self.instance.image:
self.fields['image'].required = False
self.helper = FormHelper()
self.helper.form_tag = True
self.helper.form_method = 'post'
self.helper.render_required_fields = True
self.helper.form_show_labels = True
self.helper.html5_required = True
self.helper.form_id = 'staffprofile-form'
self.helper.layout = Layout(
Field('user',),
Field('first_name',),
Field('last_name',),
Field('image',),
Field('phone',),
Field('id_number',),
Field('sex',),
Field('role',),
Field('nhif',),
Field('nssf',),
Field('pin_number',),
Field('address',),
Field('birthday',),
Field('leave_days',),
Field('sick_days',),
Field('overtime_allowed',),
Field('start_date',),
Field('end_date',),
Field('emergency_contact_name',),
Field('emergency_contact_number',),
Field('emergency_contact_relationship',),
FormActions(
Submit('submitBtn', _('Submit'), css_class='btn-primary'),
)
)