Untitled

 avatar
unknown
plain_text
4 months ago
3.3 kB
1
Indexable
from import_export import resources,fields
from import_export.fields import Field
from import_export.widgets import ForeignKeyWidget, BooleanWidget
from django.core.exceptions import ValidationError
from django.contrib.auth.models import User
from .models import *
from django.db.models import F
from import_export.formats import base_formats
from import_export.widgets import CharWidget
from import_export import resources, widgets

# Widget for program_name with custom validation
class CNWIDGET(widgets.CharWidget):
    def __init__(self, max_length=200, required=True, *args, **kwargs):
        # Accept dynamic parameters for max_length and required
        self.max_length = max_length
        self.required = required
        super(CNWIDGET, self).__init__(*args, **kwargs)

    def clean(self, value):
        # Ensure value is stripped of whitespace
        value = value.strip()

        # Check for required field
        if self.required and not value:
            raise ValidationError(u'program_name is mandatory')

        # Enforce max_length constraint
        if len(value) > self.max_length:
            raise ValidationError(u'program_name can have a max length of {} characters'.format(self.max_length))

        return value

# Widget for program_code with custom validation
class CIWIDGET(widgets.CharWidget):
    def clean(self, value):
        value = value.strip()
        if not value:
            raise ValidationError(u'program_code is mandatory')
        if len(value) > 20:
            raise ValidationError(u'program_code can have a max length of 20 characters')
        return value


class ProgramResource(resources.ModelResource):
    program_name = fields.Field(
        column_name='program_name', 
        attribute='program_name',
        widget=CNWIDGET(max_length=200, required=True)
    )
    program_code = fields.Field(
        column_name='program_code', 
        attribute='program_code',
        widget=CIWIDGET()
    )

    program_name = fields.Field(column_name='program_name', attribute='program_name', widget=CNWIDGET())
    specific_program = fields.Field(column_name='specific_program', attribute='specific_program')
    program_code = fields.Field(column_name='program_code', attribute='program_code', widget=CIWIDGET())
    client_organization = fields.Field(column_name='client_organization', attribute='client_organization')
    current_semester = fields.Field(column_name='current_semester', attribute='current_semester')
    semester_start_date = fields.Field(column_name='semester_start_date', attribute='semester_start_date')
    semester_end_date = fields.Field(column_name='semester_end_date', attribute='semester_end_date')
    ofr_letter_esc_days = fields.Field(column_name='ofr_letter_esc_days', attribute='ofr_letter_esc_days')


    class Meta:
        model = Program
        fields = (
            'program_id','specific_program','program_code', 'program_name',
            'client_organization', 'current_semester', 'semester_start_date', 
            'semester_end_date', 'ofr_letter_esc_days'
        )
        export_order = (
            'program_id', 'specific_program','program_code', 'program_name',
            'client_organization', 'current_semester', 'semester_start_date', 
            'semester_end_date', 'ofr_letter_esc_days'
        )
Editor is loading...
Leave a Comment