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
Host object
Host object
Host object
This happens for all models in my site, not just Hosts.
Rather than display the same name for each object, I would like Django to display the primary key.
Select host to change
* Add host
machine1
machine2
Here is my code:
from django.db import models
# Create your models here.
class Host(models.Model):
host = models.CharField(max_length=100,primary_key=True)
class Admin:
list_display = ('host')
class Test(models.Model):
testname = models.CharField(max_length=100,primary_key=True)
class Admin:
list_display = ('testname')
class Result(models.Model):
host = models.ForeignKey(Host)
TESTRESULT_CHOICES = (
('P', 'Pass'),
('F', 'Fail'),
)
testresult = models.CharField(max_length=1, choices=TESTRESULT_CHOICES)
reason = models.CharField(max_length=100)
time = models.DateTimeField()
testname = models.OneToOneField(Test, primary_key=True)
class Admin:
list_display = ('host','testname','time','testresult','reason')
Reading http://docs.djangoproject.com/en/dev/ref/contrib/admin/:
"ModelAdmin.list_display
Set list_display to control which fields are displayed on the change list page of the admin."
However this simply does not seem to work. Am I doing something wrong?
contrib.admin
has been reworked in 1.0, and oldAdmin
classes inside models no longer work. What you need isModelAdmin
subclass inyour_application.admin
module, e.g.Or use
__unicode__
in the model itself, e.g.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:
Add a
__unicode__()
method toHost
. To show the primary key of your host objects, you'd want something like:You might want to think about showing the contents of the
host
field: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):