add link to change page using raw_id_fields in django admin

Viewed 2922

Is there any chance to add link to change page of a Foreign key object next to 'raw_id_fields' in django admin? I use raw_id_fields to reduce number of queries to mysql. I could edit or add a foreign key object when I didn't use raw_id_fields.

How to do it with raw_id_fields?

@AntoinePinsard, I've tried the second solution. The field 'Edit My FK' was created but there is nothing except for a hyphen.

That's my modeladmin.

class FlatAdmin(admin.ModelAdmin):
    inlines = [NeedInline]
    readonly_fields = ('flat_house_edit_link',)
    raw_id_fields = ('flat_house',)
    list_display = ('show_date','show_block','show_house','show_rooms','show_price','show_stage')
    list_filter = ('flat_house__house_block','flat_rooms')
    search_fields = ('flat_house__id',)

    field = ['flat_house','flat_house_edit_link','flat_owner','flat_price','flat_rooms','flat_total_sq','flat_life_sq','flat_kitchen_sq','flat_floors']

    def flat_house_edit_link(self, instance):
        if instance:
            fk_id = instance.user_id
        else:
            fk_id = None
        if fk_id:
            opts = instance._meta.get_field('flat_house').rel.model._meta
            related_url = reverse(
                'admin:{}_{}_change/?_to_field=id&_popup=1'.format(
                     opts.ha,
                     opts.house,
                ),
                args=[fk_id],
            )
            return format_html(
                 '<a target=_blank href="{}">Go!</a>', related_url)
        else:
            return "No related object"
    flat_house_edit_link.short_description = "Change house"
admin.site.register(Flat,FlatAdmin)
2 Answers

Here's a snippet page (updated for 6 years) that does it for me:

https://djangosnippets.org/snippets/2217/

Just use ImproveRawIdFieldsForm in place of ModelAdmin and all raw_id fields automatically links the object name displayed next to the id input.

Related