class Meta: widgets = { 'supplier': AutocompleteSelect( SupplierInvoiceParts._meta.get_field('supplier').remote_field, admin.site, attrs={'data-dropdown-auto-width': 'true','style':'width:100px'} ), 'part': AutocompleteSelect( SupplierInvoiceParts._meta.get_field('part').remote_field, admin.site, attrs={'data-dropdown-auto-width': 'true','style':'width:100px'} ), }
class Meta: model = Album fields = ['band', 'featuring'] widgets = { 'band': AutocompleteSelect( Album._meta.get_field('band').remote_field, attrs={'class': 'my-class'}, ), 'featuring': AutocompleteSelect( Album._meta.get_field('featuring').remote_field, ) }
class Meta: model = Album fields = ["band", "featuring"] widgets = { "band": AutocompleteSelect( Album._meta.get_field("band"), admin.site, attrs={"class": "my-class"}, ), "featuring": AutocompleteSelect( Album._meta.get_field("featuring"), admin.site, ), }
def __init__(self, request, params, model, model_admin): self.parameter_name = '{}__{}__exact'.format(self.field_name, self.field_pk) super().__init__(request, params, model, model_admin) if self.rel_model: model = self.rel_model remote_field = model._meta.get_field(self.field_name).remote_field widget = AutocompleteSelect(remote_field, model_admin.admin_site) field = forms.ModelChoiceField( queryset=self.get_queryset_for_field(model, self.field_name), widget=widget, required=False, ) self._add_media(model_admin, widget) attrs = self.widget_attrs.copy() attrs['id'] = 'id-%s-dal-filter' % self.field_name if self.is_placeholder_title: # Upper case letter P as dirty hack for bypass django2 widget force placeholder value as empty string ("") attrs['data-Placeholder'] = self.title self.rendered_widget = field.widget.render( name=self.parameter_name, value=self.used_parameters.get(self.parameter_name, ''), attrs=attrs)
def get_widget_instance(self): rel = get_fields_from_path(self.model, self.field_name)[-1].remote_field return AutocompleteSelect( rel, self.model_admin.admin_site, )
def test_media(self): rel = Album._meta.get_field("band").remote_field base_files = ( "admin/js/vendor/jquery/jquery.min.js", "admin/js/vendor/select2/select2.full.min.js", # Language file is inserted here. "admin/js/jquery.init.js", "admin/js/autocomplete.js", ) languages = ( ("de", "de"), # Language with code 00 does not exist. ("00", None), # Language files are case sensitive. ("sr-cyrl", "sr-Cyrl"), ("zh-hans", "zh-CN"), ("zh-hant", "zh-TW"), ) for lang, select_lang in languages: with self.subTest(lang=lang): if select_lang: expected_files = (base_files[:2] + (("admin/js/vendor/select2/i18n/%s.js" % select_lang), ) + base_files[2:]) else: expected_files = base_files with translation.override(lang): self.assertEqual( AutocompleteSelect(rel, admin.site).media._js, list(expected_files), )
def formfield_for_foreignkey(self, db_field, request, **kwargs): """ Get a form Field for a ForeignKey. """ db = kwargs.get('using') if db_field.name in self.get_autocomplete_fields(request): kwargs['widget'] = AutocompleteSelect(db_field.remote_field, self.admin_site, using=db) elif db_field.name in self.raw_id_fields: kwargs['widget'] = FixedForeignKeyRawIdWidget( db_field.remote_field, self.admin_site, using=db) elif db_field.name in self.radio_fields: kwargs['widget'] = widgets.AdminRadioSelect( attrs={ 'class': get_ul_class(self.radio_fields[db_field.name]), }) kwargs['empty_label'] = _('None') if db_field.blank else None if 'queryset' not in kwargs: queryset = self.get_field_queryset(db, db_field, request) if queryset is not None: kwargs['queryset'] = queryset return db_field.formfield(**kwargs)
def formfield_for_foreignkey(self, db_field, request, **kwargs): db = kwargs.get('using') if db_field.name in self.get_autocomplete_fields(request): kwargs['widget'] = AutocompleteSelect(db_field.remote_field, self.admin_site, using=db) elif db_field.name in self.raw_id_fields: kwargs['widget'] = widgets.ForeignKeyRawIdWidget( db_field.remote_field, self.admin_site, using=db) elif db_field.name in self.radio_fields: kwargs['widget'] = widgets.AdminRadioSelect( attrs={ 'class': get_ul_class(self.radio_fields[db_field.name]), }) kwargs['empty_label'] = gettext('None') if db_field.blank else None if db_field.name == 'image': kwargs['widget'] = widgets.ForeignKeyRawIdWidget( db_field.remote_field, self.admin_site, using=db) if 'queryset' not in kwargs: queryset = self.get_field_queryset(db, db_field, request) if queryset is not None: kwargs['queryset'] = queryset return super(PlaceArticleInline, self).formfield_for_foreignkey(db_field, request, **kwargs)
def get_rendered_widget(self): rel = get_fields_from_path(self.model, self.field_name)[-1].remote_field widget = AutocompleteSelect( rel, self.model_admin.admin_site, ) FieldClass = self.get_form_field() field = FieldClass( queryset=self.get_queryset_for_field(), widget=widget, required=False, ) self._add_media(self.model_admin, widget) attrs = self.widget_attrs.copy() attrs["id"] = "id-%s-autocomplete-filter" % self.field_name attrs["class"] = f'{attrs.get("class", "")} select-filter'.strip() return field.widget.render( name=self.parameter_name, value=self.used_parameters.get(self.parameter_name, ""), attrs=attrs, )
def test_media(self): rel = Album._meta.get_field('band').remote_field base_files = ( 'admin/js/vendor/jquery/jquery.min.js', 'admin/js/vendor/select2/select2.full.min.js', # Language file is inserted here. 'admin/js/jquery.init.js', 'admin/js/autocomplete.js', ) languages = ( ('de', 'de'), # Language with code 00 does not exist. ('00', None), # Language files are case sensitive. ('sr-cyrl', 'sr-Cyrl'), ('zh-cn', 'zh-CN'), ) for lang, select_lang in languages: with self.subTest(lang=lang): if select_lang: expected_files = (base_files[:2] + (('admin/js/vendor/select2/i18n/%s.js' % select_lang), ) + base_files[2:]) else: expected_files = base_files with translation.override(lang): self.assertEqual( AutocompleteSelect(rel, admin.site).media._js, expected_files)
def __init__(self, *args, model_admin, event, **kwargs): super().__init__(*args, **kwargs) self.event = event self.fields["existing_person"].widget = AutocompleteSelect( rel=Person._meta.get_field("rsvps"), admin_site=model_admin.admin_site, choices=self.fields["existing_person"].choices, ) if "location_address2" in self.fields: self.fields["location_address2"].required = False self.fieldsets = [ ( "Compte", { "fields": ("existing_person", "new_person_email", "insoumise") }, ), ( "Informations d'inscription", { "fields": list(self.person_form_instance.fields_dict) }, ), ]
class RequiredBandForm(forms.Form): band = ModelChoiceField( queryset=Album.objects.all(), widget=AutocompleteSelect( Album._meta.get_field('band').remote_field, admin.site), required=True, )
def __init__(self, request, params, model, model_admin): if self.parameter_name: raise AttributeError('Rename attribute `parameter_name` to ' '`field_name` for {}'.format(self.__class__)) self.parameter_name = '{}__id__exact'.format(self.field_name) super().__init__(request, params, model, model_admin) if self.rel_model: model = self.rel_model remote_field = model._meta.get_field(self.field_name).remote_field attrs = self.widget_attrs.copy() field = forms.ModelChoiceField( queryset=getattr(model, self.field_name).get_queryset(), widget=AutocompleteSelect(remote_field, model_admin.admin_site), required=False) self._add_media(model_admin) attrs['id'] = 'id-%s-dal-filter' % self.field_name if self.is_placeholder_title: attrs['data-placeholder'] = "By " + self.title self.rendered_widget = field.widget.render( name=self.parameter_name, value=self.used_parameters.get(self.parameter_name, ''), attrs=attrs)
def get_rendered_widget(self): rel = models.ForeignKey(to=Segment, on_delete=models.CASCADE) rel.model = Segment widget = AutocompleteSelect( rel, self.model_admin.admin_site, ) FieldClass = self.get_form_field() field = FieldClass( queryset=self.get_queryset_for_field(), widget=widget, required=False, ) self._add_media(self.model_admin, widget) attrs = self.widget_attrs.copy() attrs["id"] = "id-%s-autocomplete-filter" % self.field_name attrs["class"] = f'{attrs.get("class", "")} select-filter'.strip() return field.widget.render( name=self.parameter_name, value=self.used_parameters.get(self.parameter_name, ""), attrs=attrs, ) + format_html( '<a style="margin-top: 5px" href="{}">Gérer les segments</a>', reverse("admin:mailing_segment_changelist"), )
def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == "group": kwargs["widget"] = AutocompleteSelect( models.GroupPermission._meta.get_field("group"), admin.site, ) return db_field.formfield(**kwargs)
def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == "meta_type": kwargs["widget"] = AutocompleteSelect( models.WorklistColumn._meta.get_field("meta_type"), admin.site, ) return db_field.formfield(**kwargs)
class Meta: widgets = { 'actividad': AutocompleteSelect( ActividadesPOA._meta.get_field('actividad').remote_field, admin.site, attrs={'style': 'width: 400px'}), }
class PopularMobileForm(forms.ModelForm): mobile = forms.ModelChoiceField( queryset=Mobile.objects.all(), widget=AutocompleteSelect(FakeRelation(Mobile), admin.site), ) class Meta: model = PopularMobile fields = ['mobile']
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Hack to make AutocompleteSelect work for non-foreign key class FakeRemoteField: model = self.queryset.model self.widget = AutocompleteSelect(FakeRemoteField, admin.site)
def __init__(self, event, model_admin, *args, **kwargs): super().__init__(*args, **kwargs) self.event = event self.fields["person"].widget = AutocompleteSelect( rel=Person._meta.get_field("organizer_configs"), admin_site=model_admin.admin_site, choices=self.fields["person"].choices, )
class Meta: fields = ('tables',) widgets = { 'tables': AutocompleteSelect( models.DbQueryUserAllowedTables._meta.get_field('tables').remote_field, admin.site, attrs={'data-dropdown-auto-width': 'true'} ), }
class Meta: model = Order exclude = [ "order_budget_total", "order_budget_labor", "order_budget_material", "order_customer_PO", "order_invoice_number" ] widgets = { "order_project": AutocompleteSelect(Order.order_project.field.remote_field, admin.site, attrs={'style': 'width: 500px'}), "order_name": forms.Textarea(attrs={ 'rows': 1, 'cols': 80 }), "order_description": forms.Textarea(attrs={ 'rows': 4, 'cols': 150 }), "order_facility": AutocompleteSelectMultiple(Order.order_facility.field.remote_field, admin.site, attrs={'style': 'width: 500px'}), "order_model_number": forms.Textarea(attrs={ 'rows': 1, 'cols': 80 }), "order_serial_number": forms.Textarea(attrs={ 'rows': 1, 'cols': 80 }), "order_customer_PO": forms.Textarea(attrs={ 'rows': 1, 'cols': 80 }), "order_invoice_number": forms.Textarea(attrs={ 'rows': 1, 'cols': 80 }), "order_internal_notes": forms.Textarea(attrs={ 'rows': 4, 'cols': 150 }), "order_client_notes": forms.Textarea(attrs={ 'rows': 4, 'cols': 150 }), }
class VariationForm(forms.ModelForm): mobile = forms.ModelChoiceField( queryset=Mobile.objects.all(), # widget=AutocompleteSelect(Mobile._meta.get_field('name').remote_field, admin.site) widget=AutocompleteSelect(FakeRelation(Mobile), admin.site), ) class Meta: model = Variation fields = ['name', 'mobile',]
class Meta: model = VideoStream fields = ["release_event"] widgets = { "release_event": AutocompleteSelect( VideoStream._meta.get_field("release_event"), admin.site, ), }
class OfferForm(forms.ModelForm): mobile = forms.ModelChoiceField( queryset=Mobile.objects.all(), # widget=AutocompleteSelect(Mobile._meta.get_field('name').remote_field, admin.site) widget=AutocompleteSelect(FakeRelation(Mobile), admin.site), ) class Meta: model = Offer fields = ['mobile', 'telecom_company', 'mobile_name', 'discount', 'discount_offered', 'offer_url', 'price', 'slug']
class MultiTrainingsForStudentForm(forms.ModelForm): student = forms.ModelChoiceField( Student.objects.all(), widget=AutocompleteSelect( Attendance._meta.get_field('student').remote_field, site)) class Meta: model = Training fields = ('group', )
class Meta: model = StaffTimeSheet fields = "__all__" widgets = { "task_belongs_to_order": AutocompleteSelect( StaffTimeSheet.task_belongs_to_order.field.remote_field, admin.site, attrs={'style': 'width: 500px'}), }
def get_widget_instance(self): # AutoCompleteSelect demande une relation dans son constructeur, mais n'utilise en réalité # que l'attribut model. On lui fournit donc un objet ad-hoc avec cet attribut. pseudo_rel = lambda: None pseudo_rel.model = self.filter_model return AutocompleteSelect( pseudo_rel, self.model_admin.admin_site, )
class Meta: model = VideoStream fields = ['release_event'] widgets = { 'release_event': AutocompleteSelect( VideoStream._meta.get_field('release_event'), admin.site, ), }
class Meta: widgets = { 'question': AutocompleteSelect(QuestionSet.questions.through._meta.get_field( 'question').remote_field, admin.site, attrs={ 'data-dropdown-auto-width': 'true', 'style': 'width: 800px;' }), }
def test_get_url(self): rel = Album._meta.get_field('band').remote_field w = AutocompleteSelect(rel) url = w.get_url() self.assertEqual(url, '/admin_widgets/band/autocomplete/')