Интерфейсная ошибка в / create-staff / Ошибка привязки параметр 0 - возможно, неподдерживаемый тип - PullRequest
0 голосов
/ 21 января 2020

Я использую 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'),
            )
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...