Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make admin editable widget a TextArea #45

Open
BarnabasSzabolcs opened this issue Oct 2, 2019 · 2 comments
Open

Make admin editable widget a TextArea #45

BarnabasSzabolcs opened this issue Oct 2, 2019 · 2 comments

Comments

@BarnabasSzabolcs
Copy link

I edit PickledObjectField's in admin using editable=True flag where the assigned widget is a textbox. So I have to add the following line to my admin class:
formfield_overrides = {PickledObjectField: {'widget': widgets.AdminTextareaWidget}, }
I think it'd be nice if this was the default behaviour.

@BarnabasSzabolcs BarnabasSzabolcs changed the title Admin editable widget should be TextArea Make admin editable widget a TextArea Oct 2, 2019
@BarnabasSzabolcs
Copy link
Author

No, sorry, now I see that the issue is more complex - before saving a PickledObjectField view the admin, we need to run json.loads() on it... duh

@BarnabasSzabolcs
Copy link
Author

BarnabasSzabolcs commented Oct 2, 2019

Ok, so my solution so far:

import ast
from django.contrib.admin import widgets
from picklefield.fields import dbsafe_encode

class PickledObjectFieldAdminTextAreaWidget(widgets.AdminTextareaWidget):
    def value_from_datadict(self, data, files, name):
        value = data.get(name)
        # we gotta have a PickledObject here otherwise CharField cleaning kicks in
        return dbsafe_encode(ast.literal_eval(value), False, 2, True)

and

class MyAdmin(admin.ModelAdmin):
    formfield_overrides = { PickledObjectField: {'widget': PickledObjectFieldAdminTextAreaWidget},}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant