Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from django import forms
- from django.conf import settings
- from django.contrib import admin
- from django.contrib.admin.utils import flatten_fieldsets
- from django.forms.models import BaseInlineFormSet
- class ShopLocationFormset(BaseInlineFormSet):
- """
- Prefilled formset
- """
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- data = {item.building_id: item.building for item in self.queryset}
- self.initial = [
- {'building': building, 'base_shop': self.instance}
- for building in (
- list(data.values())
- + list(Building.objects.exclude(id__in=data.keys()))
- )
- ]
- class ShopLocationForm(forms.ModelForm):
- class Meta:
- fields = '__all__'
- model = ShopLocation
- def __init__(self, *args, **kwargs):
- shop = kwargs.get('initial', {}).pop('base_shop', None)
- super().__init__(*args, **kwargs)
- pavilion_qs = self.fields['pavilion'].queryset
- if shop:
- pavilion_qs = pavilion_qs.filter(shop=shop)
- building = self.initial.get('building')
- if building:
- pavilion_qs = pavilion_qs.filter(floor__building=building)
- self.fields['pavilion'].queryset = pavilion_qs
- if not pavilion_qs:
- self.fields['pavilion'].required = False
- for field in trans_field('location'):
- self.fields[field].required = False
- class ShopLocationInline(TranslationTabularInline):
- can_delete = False
- form = ShopLocationForm
- formset = ShopLocationFormset
- model = ShopLocation
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- self.inline_count = Building.objects.count()
- def get_min_num(self, request, obj=None, **kwargs):
- return self.inline_count
- def get_max_num(self, request, obj=None, **kwargs):
- return self.inline_count
- def get_extra(self, request, obj=None, **kwargs):
- return self.inline_count
- def formfield_for_dbfield(self, db_field, request, **kwargs):
- field = super().formfield_for_dbfield(db_field, request, **kwargs)
- if db_field.name == 'building':
- field.widget.attrs['class'] = 'is-disabled'
- return field
- ...
Add Comment
Please, Sign In to add comment