Making Django admin display the Primary Key rather than each object's Object type

前端 未结 3 1191
耶瑟儿~
耶瑟儿~ 2021-02-04 11:43

In Django 1.1 admin, when I go to add or change an object, my objects are displayed as:

Select host to change
    * Add host

    Host object
    Host object
            


        
相关标签:
3条回答
  • 2021-02-04 12:11

    Add a __unicode__() method to Host. To show the primary key of your host objects, you'd want something like:

    class Host(models.Model):
        host = models.CharField(max_length=100, primary_key=True)
    
        def __unicode__(self):
            return self.pk
    
        ...
    

    You might want to think about showing the contents of the host field:

    class Host(models.Model):
        host = models.CharField(max_length=100, primary_key=True)
    
        def __unicode__(self):
            return self.host
    
        ...
    

    You'll need to do something similar for every model you've got.

    For Python 3 compatibility, you'll want to do something like this (see the documentation):

    from __future__ import unicode_literals
    from django.utils.encoding import python_2_unicode_compatible
    
    @python_2_unicode_compatible
    class Host(models.Model):
        host = models.CharField(max_length=100, primary_key=True)
    
        def __str__(self):
            return self.host
    
        ...
    
    0 讨论(0)
  • 2021-02-04 12:15

    contrib.admin has been reworked in 1.0, and old Admin classes inside models no longer work. What you need is ModelAdmin subclass in your_application.admin module, e.g.

    from your_application.models import Host
    from django.contrib import admin
    
    class HostAdmin(admin.ModelAdmin):
        list_display = ('host',)
    
    admin.site.register(Host, HostAdmin)
    

    Or use __unicode__ in the model itself, e.g.

    class Host(models.Model):
        host = models.CharField(max_length=100,primary_key=True)
    
        def __unicode__(self):
            return self.host
    
    0 讨论(0)
  • 2021-02-04 12:16

    It might also be worth mentioning that, if you are using an auto-incrementing primary key for your models, you will need to coerce it into a string, eg:

    def __unicode__(self):
        return str(self.pk)
    
    0 讨论(0)
提交回复
热议问题