def formfield_for_dbfield(self, db_field, **kwargs): if db_field.rel: _instance = db_field.rel.to() if hasattr(_instance, '__schema_name__') \ and _instance.__schema_name__ == "SUBCLASSABLE": request = kwargs.pop('request', None) admin_site = self.admin_site if isinstance(db_field, related.ManyToManyField): widget = MultiChoiceTypeWidget(db_field.rel, admin_site) else: widget = SingleChoiceTypeWidget(db_field.rel, admin_site) kwargs['widget'] = widget return db_field.formfield(**kwargs) formfield = super(RelatedWidgetWrapperInline, self).formfield_for_dbfield(db_field, **kwargs) if (formfield and isinstance(formfield.widget, admin.widgets.RelatedFieldWidgetWrapper) and not isinstance(formfield.widget.widget, SelectMultiple)): request = kwargs.pop('request', None) related_modeladmin = self.admin_site._registry.get(db_field.rel.to) can_change_related = bool(related_modeladmin and related_modeladmin.has_change_permission(request)) can_delete_related = bool(related_modeladmin and related_modeladmin.has_delete_permission(request)) widget = RelatedFieldWidgetWrapper.from_contrib_wrapper(formfield.widget, can_change_related, can_delete_related) formfield.widget = widget return formfield
def formfield_for_dbfield(self, db_field, **kwargs): _hidden_fields = getattr(self, 'hidden_fields', None) _hidden_fields = _hidden_fields or [] if db_field.name in _hidden_fields: widget = HiddenInput() kwargs['widget'] = widget kwargs['label'] = '' if db_field.rel: _instance = db_field.rel.to() if hasattr(_instance, '__schema_name__') \ and _instance.__schema_name__ == "SUBCLASSABLE": request = kwargs.pop('request', None) admin_site = self.admin_site if isinstance(db_field, related.ManyToManyField): widget = MultiChoiceTypeWidget(db_field.rel, admin_site) else: widget = SingleChoiceTypeWidget(db_field.rel, admin_site) kwargs['widget'] = widget return db_field.formfield(**kwargs) # OneToOne fields are rendered with a HiddenInput instead a select. if isinstance(db_field, related.OneToOneField): attrs = {'id': 'id_{}'.format(db_field.name)} if db_field.rel: _instance = db_field.rel.to() if _instance.id: attrs['value'] = _instance.id widget = HiddenInput(attrs=attrs) kwargs['widget'] = widget formfield = super(RelatedWidgetWrapperAdmin, self).formfield_for_dbfield(db_field, **kwargs) if (formfield and isinstance(formfield.widget, admin.widgets.RelatedFieldWidgetWrapper) and not isinstance(formfield.widget.widget, SelectMultiple)): request = kwargs.pop('request', None) related_modeladmin = self.admin_site._registry.get(db_field.rel.to) can_change_related = bool(related_modeladmin and related_modeladmin.has_change_permission(request)) can_delete_related = bool(related_modeladmin and related_modeladmin.has_delete_permission(request)) widget = RelatedFieldWidgetWrapper.from_contrib_wrapper(formfield.widget, can_change_related, can_delete_related) formfield.widget = widget return formfield