Alex T
Alex T

Reputation: 4659

Django form field widget becomes hidden

Model field links as foreign_key to another model which has big amount of entries.

I decided to replace default select for foreign_keys with simple link.

And it works grate besides the fact that field becomes hidden!

img

What should I do to avoid that?

admin.py

class SeriesAdmin(ModelLinkAdminFields, admin.ModelAdmin):
    modellink = ['video',]

wdiget_file.py

class ModelLinkWidget(forms.HiddenInput):

    def __init__(self, admin_site, original_object):
        self.admin_site = admin_site
        self.original_object = original_object
        super(ModelLinkWidget,self).__init__()


    def render(self, name, value, attrs=None):
        if self.original_object is not None:
            change_url = urlresolvers.reverse('admin:%s_%s_change' % 
                                              (type(self.original_object)._meta.app_label, 
                                               type(self.original_object)._meta.object_name.lower()),
                                              args=(self.original_object.id,))
            return mark_safe('<a id="%s" name="{name}" href="%s">%s</a>' % 
                             (attrs['id'], change_url , escape(self.original_object)))
        else:
            return None

class ModelLinkAdminFields(object):
    def get_form(self, request, obj=None, **kwargs):

        form = super(ModelLinkAdminFields, self).get_form(request, obj, **kwargs)

        if hasattr(self, 'modellink'):
            for field_name in self.modellink:
                if field_name in form.base_fields:
                    form.base_fields[field_name].widget = ModelLinkWidget(self.admin_site, getattr(obj, field_name, ''))
        return form

Upvotes: 1

Views: 766

Answers (1)

Sayse
Sayse

Reputation: 43300

Your widget overrides forms.HiddenInput

You should use the correct widget, I presume this should be Select but there are other options available

Upvotes: 1

Related Questions