Skip to content
Snippets Groups Projects
forms.py 2.33 KiB
Newer Older
  • Learn to ignore specific revisions
  • from django.db import models
    
    from modelcluster.fields import ParentalKey
    
    from wagtail.admin.edit_handlers import (
        FieldPanel,
        StreamFieldPanel,
    )
    from wagtail.core.fields import StreamField
    from wagtail.core.models import Orderable
    
    from ..blocks import ApplicationCustomFormFieldsBlock
    from ..edit_handlers import FilteredFieldPanel
    
    
    class ApplicationForm(models.Model):
        name = models.CharField(max_length=255)
        form_fields = StreamField(ApplicationCustomFormFieldsBlock())
    
        panels = [
            FieldPanel('name'),
            StreamFieldPanel('form_fields'),
        ]
    
        def __str__(self):
            return self.name
    
    
    class AbstractRelatedForm(Orderable):
        form = models.ForeignKey('ApplicationForm', on_delete=models.PROTECT)
    
        panels = [
    
            FilteredFieldPanel('form', filter_query={'roundbaseform__isnull': True})
    
        ]
    
        @property
        def fields(self):
            return self.form.form_fields
    
        class Meta(Orderable.Meta):
            abstract = True
    
        def __eq__(self, other):
            try:
                return self.fields == other.fields
            except AttributeError:
                return False
    
        def __str__(self):
            return self.form.name
    
    
    class ApplicationBaseForm(AbstractRelatedForm):
        application = ParentalKey('ApplicationBase', related_name='forms')
    
    
    class RoundBaseForm(AbstractRelatedForm):
        round = ParentalKey('RoundBase', related_name='forms')
    
    
    
    class LabBaseForm(AbstractRelatedForm):
        lab = ParentalKey('LabBase', related_name='forms')
    
    
    
    class AbstractRelatedReviewForm(Orderable):
        form = models.ForeignKey('review.ReviewForm', on_delete=models.PROTECT)
    
        panels = [
            FieldPanel('form')
        ]
    
        @property
        def fields(self):
            return self.form.form_fields
    
        class Meta(Orderable.Meta):
            abstract = True
    
        def __eq__(self, other):
            try:
                return self.fields == other.fields
            except AttributeError:
                return False
    
        def __str__(self):
            return self.form.name
    
    
    class ApplicationBaseReviewForm(AbstractRelatedReviewForm):
    
        application = ParentalKey('ApplicationBase', related_name='review_forms')
    
    class RoundBaseReviewForm(AbstractRelatedReviewForm):
        round = ParentalKey('RoundBase', related_name='review_forms')
    
    
    
    class LabBaseReviewForm(AbstractRelatedReviewForm):
        lab = ParentalKey('LabBase', related_name='review_forms')