Django admin: How to set up one field in fields?

I am trying to make one field in the django admin fields to show only certain data, but according to the django document , only an example is list_displayshown that can be configured. I tried a similar approach on the fieldsetsfollowing:

In models.py:

def ports_with_same_scanner(self):
    return PortList.objects.filter(scanner=self.scanner)
ports_with_same_scanner.short_description = 'port_lists'

In admin.py this will not work:

fieldsets = (
            ('Scan Template', { 
            'fields': ( ('name', 'scanner', 'ports_with_same_scanner',), 'comment', ('in_use',
                'fc_growing', 'nc_growing'), 'nvt_prefs')
            }),
)

However, if I do this:

list_display = ('name', 'scanner', 'ports_with_same_scanner', 'comment', 'in_use', 'fc_growing', 'nc_growing', 'nvt_prefs')

ports_with_same_scannerworks great. The problem is that I do not want to change my display from fieldsetsto list_display, I wonder how I can achieve the same functionality. Thank.

+5
source share
2 answers

? , limit_choices_to ForeignKeyField.

formfield_for_foreignkey modelAdmin.

- -

class YourModelAdmin(admin.ModelAdmin):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == "ports_with_same_scanner":
            kwargs["queryset"] = PortList.objects.filter(scanner=self.scanner)
        return super(YourModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

(, )

+5

, ... - readonly_fields = ()

:

models.py

class My(models.Model):

    def custom_name(self):
        return 'test'
    custom_name.allow_tags = False
    custom_name.short_description = _('custom_name')

admin.py

class MyAdmin(admin.ModelAdmin):
    fieldsets = (
            (None, {
                    'fields': ('sutom_name', )
            }),
    )
    readonly_fields = ('custom_name', )

Django >= 1.7. , Django ^,

+2

All Articles