Fix render() of PaddingCheckboxSelectMultiple widget
This commit is contained in:
parent
5a21f766b4
commit
8dc792b851
|
@ -16,7 +16,7 @@ from orchestra.admin import ExtendedModelAdmin
|
||||||
from orchestra.admin.utils import admin_date, insertattr, admin_link, change_url
|
from orchestra.admin.utils import admin_date, insertattr, admin_link, change_url
|
||||||
from orchestra.contrib.accounts.actions import list_accounts
|
from orchestra.contrib.accounts.actions import list_accounts
|
||||||
from orchestra.contrib.accounts.admin import AccountAdminMixin, AccountAdmin
|
from orchestra.contrib.accounts.admin import AccountAdminMixin, AccountAdmin
|
||||||
from orchestra.forms.widgets import paddingCheckboxSelectMultiple
|
from orchestra.forms.widgets import PaddingCheckboxSelectMultiple
|
||||||
|
|
||||||
from . import settings, actions
|
from . import settings, actions
|
||||||
from .filters import (BillTypeListFilter, HasBillContactListFilter, TotalListFilter,
|
from .filters import (BillTypeListFilter, HasBillContactListFilter, TotalListFilter,
|
||||||
|
@ -483,7 +483,7 @@ class BillContactInline(admin.StackedInline):
|
||||||
if db_field.name == 'address':
|
if db_field.name == 'address':
|
||||||
kwargs['widget'] = forms.Textarea(attrs={'cols': 70, 'rows': 2})
|
kwargs['widget'] = forms.Textarea(attrs={'cols': 70, 'rows': 2})
|
||||||
if db_field.name == 'email_usage':
|
if db_field.name == 'email_usage':
|
||||||
kwargs['widget'] = paddingCheckboxSelectMultiple(45)
|
kwargs['widget'] = PaddingCheckboxSelectMultiple(45)
|
||||||
return super().formfield_for_dbfield(db_field, **kwargs)
|
return super().formfield_for_dbfield(db_field, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,7 @@ from orchestra.admin.actions import SendEmail
|
||||||
from orchestra.admin.utils import insertattr, change_url
|
from orchestra.admin.utils import insertattr, change_url
|
||||||
from orchestra.contrib.accounts.actions import list_accounts
|
from orchestra.contrib.accounts.actions import list_accounts
|
||||||
from orchestra.contrib.accounts.admin import AccountAdmin, AccountAdminMixin
|
from orchestra.contrib.accounts.admin import AccountAdmin, AccountAdminMixin
|
||||||
from orchestra.forms.widgets import paddingCheckboxSelectMultiple
|
from orchestra.forms.widgets import PaddingCheckboxSelectMultiple
|
||||||
|
|
||||||
from .filters import EmailUsageListFilter
|
from .filters import EmailUsageListFilter
|
||||||
from .models import Contact
|
from .models import Contact
|
||||||
|
@ -61,18 +61,18 @@ class ContactAdmin(AccountAdminMixin, ExtendedModelAdmin):
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
actions = (SendEmail(), list_accounts)
|
actions = (SendEmail(), list_accounts)
|
||||||
|
|
||||||
def dispaly_name(self, contact):
|
def dispaly_name(self, contact):
|
||||||
return str(contact)
|
return str(contact)
|
||||||
dispaly_name.short_description = _("Name")
|
dispaly_name.short_description = _("Name")
|
||||||
dispaly_name.admin_order_field = 'short_name'
|
dispaly_name.admin_order_field = 'short_name'
|
||||||
|
|
||||||
def formfield_for_dbfield(self, db_field, **kwargs):
|
def formfield_for_dbfield(self, db_field, **kwargs):
|
||||||
""" Make value input widget bigger """
|
""" Make value input widget bigger """
|
||||||
if db_field.name == 'address':
|
if db_field.name == 'address':
|
||||||
kwargs['widget'] = forms.Textarea(attrs={'cols': 70, 'rows': 2})
|
kwargs['widget'] = forms.Textarea(attrs={'cols': 70, 'rows': 2})
|
||||||
if db_field.name == 'email_usage':
|
if db_field.name == 'email_usage':
|
||||||
kwargs['widget'] = paddingCheckboxSelectMultiple(130)
|
kwargs['widget'] = PaddingCheckboxSelectMultiple(130)
|
||||||
return super(ContactAdmin, self).formfield_for_dbfield(db_field, **kwargs)
|
return super(ContactAdmin, self).formfield_for_dbfield(db_field, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
@ -86,14 +86,14 @@ class ContactInline(admin.StackedInline):
|
||||||
fields = (
|
fields = (
|
||||||
('short_name', 'full_name'), 'email', 'email_usage', ('phone', 'phone2'),
|
('short_name', 'full_name'), 'email', 'email_usage', ('phone', 'phone2'),
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_extra(self, request, obj=None, **kwargs):
|
def get_extra(self, request, obj=None, **kwargs):
|
||||||
return 0 if obj and obj.contacts.exists() else 1
|
return 0 if obj and obj.contacts.exists() else 1
|
||||||
|
|
||||||
def get_view_on_site_url(self, obj=None):
|
def get_view_on_site_url(self, obj=None):
|
||||||
if obj:
|
if obj:
|
||||||
return change_url(obj)
|
return change_url(obj)
|
||||||
|
|
||||||
def formfield_for_dbfield(self, db_field, **kwargs):
|
def formfield_for_dbfield(self, db_field, **kwargs):
|
||||||
""" Make value input widget bigger """
|
""" Make value input widget bigger """
|
||||||
if db_field.name == 'short_name':
|
if db_field.name == 'short_name':
|
||||||
|
@ -101,7 +101,7 @@ class ContactInline(admin.StackedInline):
|
||||||
if db_field.name == 'address':
|
if db_field.name == 'address':
|
||||||
kwargs['widget'] = forms.Textarea(attrs={'cols': 70, 'rows': 2})
|
kwargs['widget'] = forms.Textarea(attrs={'cols': 70, 'rows': 2})
|
||||||
if db_field.name == 'email_usage':
|
if db_field.name == 'email_usage':
|
||||||
kwargs['widget'] = paddingCheckboxSelectMultiple(45)
|
kwargs['widget'] = PaddingCheckboxSelectMultiple(45)
|
||||||
return super(ContactInline, self).formfield_for_dbfield(db_field, **kwargs)
|
return super(ContactInline, self).formfield_for_dbfield(db_field, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
|
|
||||||
from orchestra.forms.widgets import SpanWidget, paddingCheckboxSelectMultiple
|
from orchestra.forms.widgets import SpanWidget, PaddingCheckboxSelectMultiple
|
||||||
|
|
||||||
|
|
||||||
class RouteForm(forms.ModelForm):
|
class RouteForm(forms.ModelForm):
|
||||||
|
@ -16,5 +16,5 @@ class RouteForm(forms.ModelForm):
|
||||||
else:
|
else:
|
||||||
self.fields['backend'].widget = SpanWidget()
|
self.fields['backend'].widget = SpanWidget()
|
||||||
actions = backend_class.actions
|
actions = backend_class.actions
|
||||||
self.fields['async_actions'].widget = paddingCheckboxSelectMultiple(45)
|
self.fields['async_actions'].widget = PaddingCheckboxSelectMultiple(45)
|
||||||
self.fields['async_actions'].choices = ((action, action) for action in actions)
|
self.fields['async_actions'].choices = ((action, action) for action in actions)
|
||||||
|
|
|
@ -37,17 +37,17 @@ class SpanWidget(forms.Widget):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
|
||||||
def paddingCheckboxSelectMultiple(padding):
|
class PaddingCheckboxSelectMultiple(forms.CheckboxSelectMultiple):
|
||||||
""" Ugly hack to render this widget nicely on Django admin """
|
""" Ugly hack to render this widget nicely on Django admin """
|
||||||
widget = forms.CheckboxSelectMultiple()
|
def __init__(self, padding, attrs=None, choices=()):
|
||||||
old_render = widget.render
|
super().__init__(attrs=attrs, choices=choices)
|
||||||
|
self.padding = padding
|
||||||
|
|
||||||
def render(self, *args, **kwargs):
|
def render(self, *args, **kwargs):
|
||||||
value = old_render(self, *args, **kwargs)
|
value = super().render(*args, **kwargs)
|
||||||
value = re.sub(r'^<ul id=([^>]+)>',
|
value = re.sub(r'^<ul id=([^>]+)>',
|
||||||
r'<ul id=\1 style="padding-left:%ipx">' % padding, value, 1)
|
r'<ul id=\1 style="padding-left:%ipx">' % self.padding, value, 1)
|
||||||
return mark_safe(value)
|
return mark_safe(value)
|
||||||
widget.render = render
|
|
||||||
return widget
|
|
||||||
|
|
||||||
|
|
||||||
class DynamicHelpTextSelect(forms.Select):
|
class DynamicHelpTextSelect(forms.Select):
|
||||||
|
|
Loading…
Reference in a new issue