Discussion:
How to get a multiple select widget for the Admin without a queryset
Mike Dewhirst
2018-11-27 03:23:23 UTC
Permalink
In the Admin I would like to provide the user with checkboxes against a
list of options not stored in the database.

Specifically, I want to retrieve a comma separated list of integers from
a model field choices attribute. The model field looks like this:

    menu_links = models.CharField(max_length=LARGE, blank=True,        
choices=MENU_LINKS,         default='',        
validators=[int_list_validator],         verbose_name='Menu data links',
        help_text="These selections control which URLs are displayed in
the " "'Substances and mixtures' menu",     )

I'm seeing two problems.

One is getting such a widget to appear in an admin.StackedInline class.

Two is creating the data in the above models.CharField from
choices=MENU_LINKS

Here it is ...

MENU_LINKS = [     (1, "ChemIDplus"),     (2, "ChemSpider"),     (3,
"NIST Webbook"), ]


In the admin I have tried

class ProfileFilteredSelectMultiple(admin.widgets.FilteredSelectMultiple):

    def __init__(self, verbose_name='Menu links', is_stacked=False,
*args, **kwargs):         args += (verbose_name,)         args +=
(is_stacked,)         super(ProfileFilteredSelectMultiple,
self).__init__(*args, **kwargs)


Then in the nested StackedInline class ...

    class CompanyProfileInline(admin.StackedInline):

        model = CompanyProfile         formfield_overrides = {
            CharField: {'widget': ProfileFilteredSelectMultiple},
        }         readonly_fields = (('modified', 'modified_by',))
        fieldsets = (             ('More detail for company profile', {
                'classes': ('collapse', 'wider'),                
'fields': (                      'menu_links',                      ...

Any hints or pointers will be appreciated.

Thanks

Mike
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+***@googlegroups.com.
To post to this group, send email to django-***@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/a49d990e-67fc-3327-4205-a3b843f7f7ae%40dewhirst.com.au.
For more options, visit https://groups.google.com/d/optout.
shiva kumar
2018-11-27 04:57:28 UTC
Permalink
Can you explain what ur problem briefly.
Post by Mike Dewhirst
In the Admin I would like to provide the user with checkboxes against a
list of options not stored in the database.
Specifically, I want to retrieve a comma separated list of integers from a
menu_links = models.CharField(max_length=LARGE, blank=True,
choices=MENU_LINKS,
default='',
validators=[int_list_validator],
verbose_name='Menu data links',
help_text="These selections control which URLs are displayed in the "
"'Substances and mixtures' menu",
)
I'm seeing two problems.
One is getting such a widget to appear in an admin.StackedInline class.
Two is creating the data in the above models.CharField from
choices=MENU_LINKS
Here it is ...
MENU_LINKS = [
(1, "ChemIDplus"),
(2, "ChemSpider"),
(3, "NIST Webbook"),
]
In the admin I have tried
args += (verbose_name,)
args += (is_stacked,)
super(ProfileFilteredSelectMultiple, self).__init__(*args, **kwargs)
Then in the nested StackedInline class ...
model = CompanyProfile
formfield_overrides = {
CharField: {'widget': ProfileFilteredSelectMultiple},
}
readonly_fields = (('modified', 'modified_by',))
fieldsets = (
('More detail for company profile', {
'classes': ('collapse', 'wider'),
'fields': (
'menu_links',
...
Any hints or pointers will be appreciated.
Thanks
Mike
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/a49d990e-67fc-3327-4205-a3b843f7f7ae%40dewhirst.com.au
<https://groups.google.com/d/msgid/django-users/a49d990e-67fc-3327-4205-a3b843f7f7ae%40dewhirst.com.au?utm_medium=email&utm_source=footer>
.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+***@googlegroups.com.
To post to this group, send email to django-***@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAMsYeuE%3Dcxh-AC3e%2BZ9z57TEPMqbGO5CfohyVxuQSFyzJML0zw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
Mike Dewhirst
2018-11-27 05:27:50 UTC
Permalink
Post by shiva kumar
Can you explain what ur problem briefly.
In the Admin I show a list of substance names and against each one there
can be a list of clickable links to public chemical databases. When the
user clicks one of those links the database opens in a new browser page
with that substance showing. The user may then browse that public
database for info on that substance.

Currently we have hard-coded three of 14 or 15 different public chemical
databases. Different users have different preferences so I want to allow
them to select their preferred one or two in their company profile and
tweak the Admin to check the profile and display those instead of the
hard-coded three.

Since sending that earlier email I have adjust the field type to
ListField (import CharField as ListField) so that I know there is only
one field in the entire project which is a ListField. This is for CSS
and formfield_overrides.
Post by shiva kumar
In the Admin I would like to provide the user with checkboxes
against a list of options not stored in the database.
Specifically, I want to retrieve a comma separated list of
integers from a model field choices attribute. The model field
    menu_links = models.CharField(max_length=LARGE, blank=True,
        choices=MENU_LINKS,         default='',        
validators=[int_list_validator],         verbose_name='Menu data
links',         help_text="These selections control which URLs are
displayed in the " "'Substances and mixtures' menu",     )
I'm seeing two problems.
One is getting such a widget to appear in an admin.StackedInline class.
Two is creating the data in the above models.CharField from
choices=MENU_LINKS
Here it is ...
MENU_LINKS = [     (1, "ChemIDplus"),     (2, "ChemSpider"),    
(3, "NIST Webbook"), ]
In the admin I have tried
class
    def __init__(self, verbose_name='Menu links',
is_stacked=False, *args, **kwargs):         args +=
(verbose_name,)         args += (is_stacked,)        
super(ProfileFilteredSelectMultiple, self).__init__(*args, **kwargs)
Then in the nested StackedInline class ...
        model = CompanyProfile         formfield_overrides = {
            CharField: {'widget': ProfileFilteredSelectMultiple},
        }         readonly_fields = (('modified', 'modified_by',))
        fieldsets = (             ('More detail for company
profile', {                 'classes': ('collapse', 'wider'),
                'fields': (                      'menu_links',
                     ...
Any hints or pointers will be appreciated.
Thanks
Mike
--
You received this message because you are subscribed to the Google
Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it,
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/a49d990e-67fc-3327-4205-a3b843f7f7ae%40dewhirst.com.au
<https://groups.google.com/d/msgid/django-users/a49d990e-67fc-3327-4205-a3b843f7f7ae%40dewhirst.com.au?utm_medium=email&utm_source=footer>.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google
Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/CAMsYeuE%3Dcxh-AC3e%2BZ9z57TEPMqbGO5CfohyVxuQSFyzJML0zw%40mail.gmail.com
<https://groups.google.com/d/msgid/django-users/CAMsYeuE%3Dcxh-AC3e%2BZ9z57TEPMqbGO5CfohyVxuQSFyzJML0zw%40mail.gmail.com?utm_medium=email&utm_source=footer>.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+***@googlegroups.com.
To post to this group, send email to django-***@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/2e7648dd-54c6-9ad1-6677-3a7243a6edf5%40dewhirst.com.au.
For more options, visit https://groups.google.com/d/optout.
Continue reading on narkive:
Loading...