django - GeoDjango: Can I use OSMGeoAdmin in an Inline in the User Admin? -


profile contains pointfield. i've used osmgeoadmin in profileadmin, here:

class profileadmin(admin.osmgeoadmin):     model = profile 

but can't figure out how use in inline display in useradmin. have set below:

# user admin, profile attached class profileinline(admin.stackedinline):     model = profile     can_delete = false     verbose_name_plural = 'profile'  # 1 displayed in view  class useradmin(useradmin):     inlines = (         profileinline,     )  admin.site.unregister(user) admin.site.register(user, useradmin) 

is possible use class osmgeoadmin in situation?

this feature request guess.

as workaround, can take advantage of fact inlinemodeladmin quite similar modeladmin. both extend basemodeladmin.

inheriting both stackedinline , modeladmin should not clash much.

the issue both __init__() methods take 2 positional arguments , call super().__init__() without arguments. whatever inheritance order, fail typeerror: __init__() missing 2 required positional arguments: 'parent_model' , 'admin_site'

fortunately, inlinemodeladmin.__init__() method, 1 interested in, not verbose nor complex (not super().__init__() calls in cascade).

here looks in django 1.9:

def __init__(self, parent_model, admin_site):     self.admin_site = admin_site     self.parent_model = parent_model     self.opts = self.model._meta     self.has_registered_model = admin_site.is_registered(self.model)     super(inlinemodeladmin, self).__init__()     if self.verbose_name none:         self.verbose_name = self.model._meta.verbose_name     if self.verbose_name_plural none:         self.verbose_name_plural = self.model._meta.verbose_name_plural 

and here parent (basemodeladmin) looks in django 1.9

def __init__(self):     overrides = formfield_for_dbfield_defaults.copy()     overrides.update(self.formfield_overrides)     self.formfield_overrides = overrides 

now let's put together:

from django.contrib.admin.options import formfield_for_dbfield_defaults  # user admin, profile attached class profileinline(osmgeoadmin, admin.stackedinline):     model = profile     can_delete = false     verbose_name_plural = 'profile'  # 1 displayed in view      def __init__(self, parent_model, admin_site):         self.admin_site = admin_site         self.parent_model = parent_model         self.opts = self.model._meta         self.has_registered_model = admin_site.is_registered(self.model)         overrides = formfield_for_dbfield_defaults.copy()         overrides.update(self.formfield_overrides)         self.formfield_overrides = overrides         if self.verbose_name none:             self.verbose_name = self.model._meta.verbose_name         if self.verbose_name_plural none:             self.verbose_name_plural = self.model._meta.verbose_name_plural  class useradmin(useradmin):     inlines = (         profileinline,     )  admin.site.unregister(user) admin.site.register(user, useradmin) 

it's not satisfying solution requires copy/paste code django, may different within version of django use, , might pain maintain when upgrading django. should work until included in django mix-in or inlinemodeladmin.

note: code snippets above taken django 1.9, should browse github tags find snippets corresponding version.


Comments

Popular posts from this blog

dns - How To Use Custom Nameserver On Free Cloudflare? -

python - Pygame screen.blit not working -

c# - Web API response xml language -