Skip to content

forms

django_spire.metric.visual.presentation.forms

PresentationModelForm

Bases: ModelForm

Meta

model = models.Presentation class-attribute instance-attribute
fields = ['name', 'description'] class-attribute instance-attribute
exclude = [] class-attribute instance-attribute

save_model_obj

Source code in django_spire/metric/visual/presentation/forms.py
@Glue.attr(required_access=Glue.Access.CHANGE)
def save_model_obj(self, request: HttpRequest) -> GlueResponse:
    if self.is_valid():
        presentation, _ = self.instance.services.save_model_obj(**self.cleaned_data)

        return GlueResponse(
            result={'redirect': {'url': _presentation_detail_url(presentation.pk)}}
        )

    return GlueResponse(messages=[GlueMessage.error('Invalid Fields')])

SlideModelForm

Bases: ModelForm

Meta

model = models.Slide class-attribute instance-attribute
fields = ['presentation', 'name', 'order'] class-attribute instance-attribute
exclude = [] class-attribute instance-attribute
widgets = {'order': forms.NumberInput(attrs={'min': 0})} class-attribute instance-attribute

save_model_obj

Source code in django_spire/metric/visual/presentation/forms.py
@Glue.attr(required_access=Glue.Access.CHANGE)
def save_model_obj(self, request: HttpRequest) -> GlueResponse:
    if self.is_valid():
        slide, _ = self.instance.services.save_model_obj(**self.cleaned_data)

        return GlueResponse(
            result={'redirect': {'url': _presentation_detail_url(slide.presentation_id)}}
        )

    return GlueResponse(messages=[GlueMessage.error('Invalid Fields')])

clean

Source code in django_spire/metric/visual/presentation/forms.py
def clean(self) -> dict:
    cleaned_data = super().clean()

    presentation = cleaned_data.get('presentation')
    order = cleaned_data.get('order')

    if presentation is not None and order is not None:
        queryset = models.Slide.objects.filter(presentation=presentation, order=order)
        if self.instance.pk:
            queryset = queryset.exclude(pk=self.instance.pk)

        if queryset.exists():
            self.add_error(
                'order', 'A slide with this order already exists in this presentation.'
            )

    return cleaned_data

SlideSectionModelForm

Bases: ModelForm

Source code in django_spire/metric/visual/presentation/forms.py
def __init__(self, *args, **kwargs) -> None:
    super().__init__(*args, **kwargs)

    for name, context in (('row', 'Row'), ('col', 'Column')):
        value = getattr(self.instance, name, 0)
        choices = [(str(index), f'{context} {index + 1}') for index in range(3)]

        if value not in range(3):
            choices.append((str(value), f'{context} {value + 1}'))

        self.fields[name] = forms.ChoiceField(choices=choices)

Meta

model = models.SlideSection class-attribute instance-attribute
fields = ['slide', 'visual', 'row', 'col'] class-attribute instance-attribute
exclude = [] class-attribute instance-attribute
widgets = {'row': forms.Select(), 'col': forms.Select()} class-attribute instance-attribute

save_model_obj

Source code in django_spire/metric/visual/presentation/forms.py
@Glue.attr(required_access=Glue.Access.CHANGE)
def save_model_obj(self, request: HttpRequest) -> GlueResponse:
    if self.is_valid():
        section, _ = self.instance.services.save_model_obj(**self.cleaned_data)

        return GlueResponse(
            result={
                'redirect': {'url': _presentation_detail_url(section.slide.presentation_id)}
            }
        )

    return GlueResponse(messages=[GlueMessage.error('Invalid Fields')])

clean

Source code in django_spire/metric/visual/presentation/forms.py
def clean(self) -> dict:
    cleaned_data = super().clean()

    row = cleaned_data.get('row')
    col = cleaned_data.get('col')
    slide = cleaned_data.get('slide')

    if row is not None and col is not None and slide is not None:
        queryset = models.SlideSection.objects.filter(slide=slide, row=row, col=col)
        if self.instance.pk:
            queryset = queryset.exclude(pk=self.instance.pk)

        if queryset.exists():
            self.add_error('col', 'That cell is already occupied on this slide.')

    return cleaned_data