class CreatePage(forms.ModelForm): header_link_texts = SplitArrayField(forms.CharField(required=False), size=3, remove_trailing_nulls=False, required=False) body_iv_images = SplitArrayField(forms.FileField(required=False), size=10, remove_trailing_nulls=False, required=False) class Meta: model = models.Page fields = [ 'header_title', 'header_logo', 'header_link_texts', # 'header_link_urls', # 'body_heading', # 'body_pr_image', # 'body_bg_image', 'body_buy_button', 'body_bb_code', 'body_bb_image', 'body_bb_link', 'body_above_bb', 'body_below_bb', # 'body_iv_types', 'body_iv_images', # 'body_iv_videos', # 'body_iv_textfields', # 'testimonial_heading', # 'testimonial_slider', # 'testimonial_ivs', # 'video_urls', # 'footer_address', # 'footer_link_text_0', # 'footer_link_text_1', # 'footer_link_text_2', # 'footer_link_url_0', # 'footer_link_url_1', # 'footer_link_url_2', # 'footer_color_select', # 'footer_font_size', # 'footer_tracking_code', # 'footer_facebook_title', # 'footer_facebook_image', # 'footer_facebook_description', # 'shop', # 'submit_type' ] widgets = { # 'header_link_texts': SplitArrayWidget(forms.TextInput(), size=3), # 'body_iv_images': SplitArrayWidget(forms.ClearableFileInput(), size=3), # 'header_link_urls': SplitArrayWidget(forms.URLInput(), size=3), # 'body_iv_types': SplitArrayWidget(forms.TextInput(), size=10), # 'body_iv_videos': SplitArrayWidget(forms.URLInput(), size=10), # 'body_iv_textfields': SplitArrayWidget(forms.TextInput(), size=10), }
class HotelForm(forms.ModelForm): """ This is another way for defining a Form based on a Model """ # class Meta: # model = Hotel # fields = ['name', 'city', 'stars', 'rooms', 'floors', # 'elevators', 'address', 'phone_list', # 'email_list', 'extra_notes'] name = forms.CharField(max_length=50, strip=True) city = forms.CharField(max_length=50, strip=True) stars = forms.IntegerField() rooms = forms.IntegerField() floors = forms.IntegerField() elevators = forms.IntegerField() address = forms.CharField(max_length=200, strip=True) phone_list = SplitArrayField(forms.CharField(max_length=20, strip=True), size=5, remove_trailing_nulls=True) email_list = SplitArrayField(forms.EmailField(max_length=100), size=5, remove_trailing_nulls=True) extra_notes = SplitArrayField(forms.CharField(max_length=100, strip=True), size=5, remove_trailing_nulls=True)
def test_invalid_char_length(self): field = SplitArrayField(forms.CharField(max_length=2), size=3) with self.assertRaises(exceptions.ValidationError) as cm: field.clean(['abc', 'c', 'defg']) self.assertEqual(cm.exception.messages, [ 'Item 0 in the array did not validate: Ensure this value has at most 2 characters (it has 3).', 'Item 2 in the array did not validate: Ensure this value has at most 2 characters (it has 4).', ])
class RestaurantForm(forms.ModelForm): name = forms.CharField(max_length=50, strip=True) city = forms.CharField(max_length=50, strip=True) address = forms.CharField(max_length=200, strip=True) phone_list = SplitArrayField(forms.CharField(max_length=20, strip=True), size=5, remove_trailing_nulls=True) email_list = SplitArrayField(forms.EmailField(max_length=100), size=5, remove_trailing_nulls=True) extra_notes = SplitArrayField(forms.CharField(max_length=100, strip=True), size=5, remove_trailing_nulls=True)
class PersonForm(forms.ModelForm): firstname = forms.CharField(max_length=20, strip=True) lastname = forms.CharField(max_length=20, strip=True) nickname = forms.CharField(max_length=20, strip=True, help_text="English name for Korean guides") phone_list = SplitArrayField(forms.CharField(max_length=20, strip=True), size=5, remove_trailing_nulls=True) email_list = SplitArrayField(forms.EmailField(max_length=100), size=5, remove_trailing_nulls=True) job_position = forms.ModelChoiceField(queryset=JobPosition.objects.all(), empty_label=None) extra_notes = SplitArrayField(forms.CharField(max_length=100, strip=True), size=5, remove_trailing_nulls=True)
def test_invalid_char_length(self): field = SplitArrayField(forms.CharField(max_length=2), size=3) with self.assertRaises(exceptions.ValidationError) as cm: field.clean(["abc", "c", "defg"]) self.assertEqual( cm.exception.messages, [ "Item 1 in the array did not validate: Ensure this value has at most 2 " "characters (it has 3).", "Item 3 in the array did not validate: Ensure this value has at most 2 " "characters (it has 4).", ], )
class TaskStackForm(forms.ModelForm): tasks = SplitArrayField(forms.CharField(), size=10, remove_trailing_nulls=True) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)
def test_invalid_integer(self): msg = ( "Item 2 in the array did not validate: Ensure this value is less than or " "equal to 100." ) with self.assertRaisesMessage(exceptions.ValidationError, msg): SplitArrayField(forms.IntegerField(max_value=100), size=2).clean([0, 101])
class SplitForm(forms.Form): array = SplitArrayField( forms.CharField(required=False), size=2, remove_trailing_nulls=True, required=False, )
class Form(forms.ModelForm): field = SplitArrayField( forms.IntegerField(), required=False, size=2, remove_trailing_nulls=True ) class Meta: model = IntegerArrayModel fields = ("field",)
class QuestionPageForm(forms.ModelForm): answers = SplitArrayField( forms.CharField(max_length=1024, required=False), 10, # number of CharField displayed remove_trailing_nulls=True) answers_before = SplitArrayField( forms.CharField(max_length=1024, required=False), 10, # number of CharField displayed remove_trailing_nulls=True) answers_expired = SplitArrayField( forms.CharField(max_length=1024, required=False), 10, # number of CharField displayed remove_trailing_nulls=True) class Meta: model = QuestionPage fields = "__all__"
class Form(forms.ModelForm): field = SplitArrayField(forms.IntegerField(), required=False, size=2) class Meta: model = IntegerArrayModel fields = ('field', )
class RestaurantMenuForm(forms.ModelForm): name = forms.CharField(max_length=50, strip=True) is_bread_included = forms.BooleanField() is_tip_included = forms.BooleanField() appetizer_list = SplitArrayField(forms.CharField(max_length=50, strip=True), size=5, remove_trailing_nulls=True) soup_list = SplitArrayField(forms.CharField(max_length=50, strip=True), size=5, remove_trailing_nulls=True) salad_list = SplitArrayField(forms.CharField(max_length=50, strip=True), size=5, remove_trailing_nulls=True) main_dish_list = SplitArrayField(forms.CharField(max_length=50, strip=True), size=5, remove_trailing_nulls=True) dessert_list = SplitArrayField(forms.CharField(max_length=50, strip=True), size=5, remove_trailing_nulls=True) drink_list = SplitArrayField(forms.CharField(max_length=50, strip=True), size=5, remove_trailing_nulls=True) cost_per_person = forms.DecimalField(min_value=0.0, max_value=10000.0, max_digits=5, decimal_places=1) restaurant = forms.ModelChoiceField(queryset=Restaurant.objects.all(), empty_label="(Choose Restaurant)") extra_notes = SplitArrayField(forms.CharField(max_length=100, strip=True), size=5, remove_trailing_nulls=True)
class HotelReservationForm(forms.ModelForm): group = forms.ModelChoiceField(queryset=GroupDetail.objects.all(), empty_label="(Choose Group)") hotel = forms.ModelChoiceField(queryset=Hotel.objects.all(), empty_label='(Choose Hotel)') confirmation_date = forms.DateField() extra_notes = SplitArrayField(forms.CharField(max_length=100, strip=True), size=5, remove_trailing_nulls=True)
class HotelDepositForm(forms.ModelForm): deposit_date = forms.DateField() amount = forms.DecimalField(max_digits=5, decimal_places=1) hotel_reservation = forms.ModelChoiceField( HotelReservation.objects.all(), empty_label='(Choose Reservation)', limit_choices_to=20) extra_notes = SplitArrayField(forms.CharField(max_length=100, strip=True), size=5, remove_trailing_nulls=True)
class PollForm(forms.ModelForm): choices = SplitArrayField(forms.CharField(required=False, max_length=254), 8, remove_trailing_nulls=True) class Meta: model = Poll fields = '__all__' class Media: css = {'screen': ("admin/poll.css", )}
class CompanyDetailsForm(OrganizationDetailForm): sectors = SplitArrayField(forms.TypedChoiceField( choices=((None, '-----'), ) + CompanySector.CHOICES, required=False, empty_value=None, coerce=int), size=len(CompanySector.CHOICES), remove_trailing_nulls=True) class Meta: model = CompanyDetails fields = '__all__'
class UpdateAlternateEmailForm(UpdateFormBase): SplitArrayField(EmailField(required=True), size=float("inf"), remove_trailing_nulls=False) class Meta: model = User fields = ['alternate_email'] def __init__(self, *args, **kwargs): super(UpdateAlternateEmailForm, self).__init__(*args, **kwargs) self.helper = helper.FormHelper(self) self.helper.form_show_labels = False self.helper.form_tag = False self.helper.layout = layout.Layout(layout.Div())
class RestaurantReservationForm(forms.ModelForm): group = forms.ModelChoiceField(queryset=GroupDetail.objects.all(), empty_label="(Choose Group)") restaurant_menu = forms.ModelChoiceField(queryset=RestaurantMenu.objects.all(), empty_label="(Choose Menu)") reservation_date_time = forms.DateTimeField() total_pax = forms.IntegerField(min_value=0, max_value=100) free_pax = forms.IntegerField(min_value=0, max_value=100) # is_confirmed = models.BooleanField(default=False) extra_cost = forms.DecimalField(min_value=0.0, max_value=10000.0, max_digits=5, decimal_places=1) extra_notes = SplitArrayField(forms.CharField(max_length=100, strip=True), size=5, remove_trailing_nulls=True)
from django.db import models from django_postgres_extensions.models.fields import HStoreField, JSONField, ArrayField from django_postgres_extensions.models.fields.related import ArrayManyToManyField from django import forms from django.contrib.postgres.forms import SplitArrayField from django_postgres_extensions.forms.fields import NestedFormField details_fields = ( ('Brand', NestedFormField(keys=('Name', 'Country'))), ('Type', forms.CharField(max_length=25, required=False)), ('Colours', SplitArrayField(base_field=forms.CharField(max_length=10, required=False), size=10)), ) class Buyer(models.Model): time = models.DateTimeField(auto_now_add=True) name = models.CharField(max_length=20) def __str__(self): return self.name class Product(models.Model): name = models.CharField(max_length=15) keywords = ArrayField(models.CharField(max_length=20), default=[], form_size=10, blank=True) sports = ArrayField(models.CharField(max_length=20),default=[], blank=True, choices=( ('football', 'Football'), ('tennis', 'Tennis'), ('golf', 'Golf'), ('basketball', 'Basketball'), ('hurling', 'Hurling'), ('baseball', 'Baseball'))) shipping = HStoreField(keys=('Address', 'City', 'Region', 'Country'), blank=True, default={}) details = JSONField(fields=details_fields, blank=True, default={}) buyers = ArrayManyToManyField(Buyer) def __str__(self): return self.name
class SplitForm(forms.Form): array = SplitArrayField(forms.CharField(), size=3)
class TransientServerForm(forms.ModelForm): """ Save an individual :model:`shepherd.TransientServer` associated with an individual :model:`rolodex.Project`. """ aux_address = SplitArrayField(forms.GenericIPAddressField(), size=3, remove_trailing_nulls=True) class Meta: model = TransientServer fields = "__all__" widgets = { "project": forms.HiddenInput(), } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) for field in self.fields: self.fields[field].widget.attrs["autocomplete"] = "off" self.fields["ip_address"].widget.attrs["placeholder"] = "IP Address" self.fields["name"].widget.attrs["placeholder"] = "Hostname" self.fields["activity_type"].empty_label = "-- Select Activity --" self.fields["server_role"].empty_label = "-- Select Role --" self.fields["server_provider"].empty_label = "-- Select Provider --" # Below is necessary due to a bug that sets `SplitArrayField` fields to `required` # even when the field is set as `required=False` above self.fields["aux_address"].required = False self.helper = FormHelper() self.helper.form_method = "post" self.helper.form_class = "newitem" self.helper.form_show_labels = False self.helper.layout = Layout( HTML(""" <h4 class="icon server-icon">Server Information</h4> <hr> """), Row( Column("name", css_class="form-group col-md-6 mb-0"), Column("ip_address", css_class="form-group col-md-6 mb-0"), css_class="form-row", ), Row( Column("activity_type", css_class="form-group col-md-4 mb-0"), Column("server_role", css_class="form-group col-md-4 mb-0"), Column("server_provider", css_class="form-group col-md-4 mb-0"), css_class="form-row", ), HTML(""" <p>Include up to three additional IP addresses:</p> """), "aux_address", HTML(""" <h4 class="icon comment-icon">Additional Information</h4> <hr> """), "note", "project", ButtonHolder( Submit("submit", "Submit", css_class="btn btn-primary col-md-4"), HTML(""" <button onclick="window.location.href='{{ cancel_link }}'" class="btn btn-outline-secondary col-md-4" type="button">Cancel</button> """), ), )
class SplitForm(forms.Form): array = SplitArrayField(forms.CharField(), required=True, size=3)