Skip to content

Latest commit

 

History

History
359 lines (293 loc) · 8.83 KB

forms.adoc

File metadata and controls

359 lines (293 loc) · 8.83 KB

Django forms

from django import forms

class AuthorFormMixin(forms.Form):

    author_name = forms.CharField(
        label='Author Name',
        help_text='Specify Author Name here',
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter Author Name Here'
        })
    )


class BookForm(AuthorFormMixin, forms.Form):

    book_name = forms.CharField(
        label='Book Name',
        help_text='Specify Book Name here',
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter Book Name Here'
        })
    )


class NoteForm(AuthorFormMixin, forms.Form):

    note_text = forms.CharField(
        label='Note Text',
        help_text='Specify Note Text here',
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter Note Text Here'
        })
    )

Uses bootstrap(v4) and select2 for frontend styling.

from django import forms

from .models import Author, Genre

class AllDjangoFieldForm(forms.Form):

    STATUS_CHOICES = (
        ('unconfirmed', 'Unconfirmed'),
        ('pending', 'Pending'),
        ('accepted', 'Accepted'),
        ('rejected', 'Rejected'),
    )

    genre = forms.ModelChoiceField(
        queryset=Genre.objects.all(),
        empty_label='All',
        label='Genre',
        widget=forms.Select(attrs={
                'class': 'select2_elements',
                'placeholder': 'Select Genre',
                'style': 'width : 100%'
            }
        )
    )

    author = forms.ModelMultipleChoiceField(
        queryset=Author.objects.all(),
        label='Author',
        widget=forms.SelectMultiple(attrs={
                'class': 'select2_elements',
                'placeholder': 'Select Author',
                'style': 'width : 100%',
                'multiple': 'multiple'
            }
        ),
    )

    status = forms.ChoiceField(
        choices=STATUS_CHOICES,
        widget=forms.Select(attrs={
                'class': 'select2_elements',
                'placeholder': 'Select Status',
                'style': 'width : 100%'
            }),
        )

    action_date = forms.DateTimeField(
        label='Select Action Date',
        input_formats=['%d %b %Y %H:%M'],
        help_text='Date on which action is taken',
        widget=forms.DateInput(attrs={
            'class': 'form-control',
            'placeholder': 'Action Date'
            }
        ),
    )

    book_name = forms.CharField(
        label='Book Name',
        help_text='Specify Book Name here',
        required=False,
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter Book Name Here'
        })
    )

    description = forms.CharField(
        label='Description',
        help_text='Specify Description here',
        widget=forms.Textarea(attrs={
            'class': 'form-control',
            'placeholder': 'Description here',
            'rows': '4'
        })
    )

    is_published = forms.BooleanField(
        label='Is Book Published',
        required=False,
    )

    book_id = forms.CharField(
        widget=forms.HiddenInput()
    )
from django import forms


class ContactForm(forms.Form):

    phone_number = forms.CharField(
        label='Phone Number',
        help_text='Specify Phone Number here',
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter Phone Number Here'
        })
    )

    name = forms.CharField(
        label='Name',
        help_text='Specify Name here',
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter Name Here'
        })
    )

    email = forms.EmailField(
        label='Name',
        help_text='Specify Name here',
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter Name Here'
        })
    )

    def clean_phone_number(self):
        phone_number = self.cleaned_data.get('phone_number')
        if phone_number and len(phone_number) != 10:
            self.add_error('phone_number', 'Phone Number should be of 10 digits')
        # dont forget to return the value
        return phone_number

    def clean(self):
        cleaned_data = super(ContactForm, self).clean()
        name = cleaned_data.get('name')
        email = cleaned_data.get('email')
        if name and not email:
            raise forms.ValidationError('Email is required when name is entered')
        return cleaned_data
from django import forms


class BookForm(forms.Form):

    genre = forms.ModelChoiceField(
        queryset=Genre.objects.all(),
        empty_label='All',
        label='Genre',
        widget=forms.Select(attrs={
                'class': 'select2_elements',
                'placeholder': 'Select Genre',
                'style': 'width : 100%'
            }
        )
    )

    name = forms.CharField(
        label='Book Name',
        help_text='Specify Book Name here',
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter Book Name Here'
        })
    )

    def __init__(self, *args, **kwargs):
        super(BookForm, self).__init__(*args, **kwargs)
        self.fields['genre'].queryset = Genre.objects.filter(is_enabled=True)
from django.forms import ModelForm

from .models import Book

class BookForm(ModelForm):

    class Meta:
        model = Book
        fields = ('name', )
        labels = {
            'name': 'Book Name',
        }
        widgets = {
            'name': forms.TextInput(
                attrs={
                    'class': 'form-control',
                    'placeholder': 'Enter Book Name Here'
                    }
                )
        }
from django import forms

class BookForm(forms.Form):

    book_name = forms.CharField(
        label='Book Name',
        help_text='Specify Book Name here',
        widget=forms.TextInput(attrs={
            'class': 'form-control',
            'placeholder': 'Enter Book Name Here'
        })
    )

    genre = forms.ChoiceField(
        label='Genre',
        help_text='Specify Genre here',
        choices=(),
        widget=forms.Select(attrs={
            'class': 'select2_elements',
            'placeholder': 'Select Genre',
            'style': 'width : 100%'
        })
    )

    def __init__(self, *args, **kwargs):
        super(BookForm, self).__init__(*args, **kwargs)
        choices = [('', '')] + [(genre.name, genre.name) for genre in Genre.objects.all()]
        self.fields['genre'].choices = choices
from django import forms

class BookForm(forms.Form):

    def __init__(self, *args, **kwargs):
        super(BookForm, self).__init__(*args, **kwargs)
        self.fields['book_name'] = forms.CharField(
            label='Book Name',
            help_text='Specify Book Name here',
            widget=forms.TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'Enter Book Name Here'
            })
        )
from django import forms


class BookForm(forms.Form):

    genre = forms.ChoiceField(
        label='Genre',
        help_text='Specify Genre here',
        choices=(),
        widget=forms.Select(attrs={
            'class': 'select2_elements',
            'placeholder': 'Select Genre',
            'style': 'width : 100%'
        })
    )

    def __init__(self, *args, **kwargs):
        genre_category = kwargs.pop('genre_category', None)
        if genre_category:
            queryset = Genre.objects.filter(category__in=genre_category)
        else:
            queryset = Genre.objects.all()
        choices = [('', '')] + [(genre.name, genre.name) for genre in queryset]
        super(BookForm, self).__init__(*args, **kwargs)
        self.fields['genre'].choices = choices


# in views, when creating form instance, pass `genre_category`
form_obj = BookForm(request.GET or None, genre_category=my_custom_genre_category)