11

Django 1.1 admin では、オブジェクトを追加または変更しようとすると、オブジェクトは次のように表示されます。

Select host to change
    * Add host

    Host object
    Host object
    Host object
    Host object
    Host object

これは、ホストだけでなく、サイト内のすべてのモデルで発生します。

各オブジェクトに同じ名前を表示するのではなく、Django に主キーを表示させたいと考えています。

Select host to change
    * Add host

    machine1
    machine2

これが私のコードです:

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')

http://docs.djangoproject.com/en/dev/ref/contrib/admin/を読む:

"ModelAdmin.list_display

admin の変更リスト ページに表示されるフィールドを制御するには、list_display を設定します。"

ただし、これは単に機能していないようです。私は何か間違ったことをしていますか?

4

3 に答える 3

33

__unicode__()にメソッドを追加しHostます。ホスト オブジェクトの主キーを表示するには、次のようにします。

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

    def __unicode__(self):
        return self.pk

    ...

hostフィールドの内容を表示することを考えてみてください:

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

    def __unicode__(self):
        return self.host

    ...

持っているすべてのモデルに対して同様のことを行う必要があります。

Python 3 との互換性のために、次のようにする必要があります (ドキュメントを参照してください)。

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

    ...
于 2009-10-20T13:00:35.797 に答える
10

contrib.admin1.0 で作り直され、Adminモデル内の古いクラスは機能しなくなりました。必要なのは、モジュール内のModelAdminサブクラスです。your_application.admin

from your_application.models import Host
from django.contrib import admin

class HostAdmin(admin.ModelAdmin):
    list_display = ('host',)

admin.site.register(Host, HostAdmin)

または__unicode__、モデル自体で使用します。

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

    def __unicode__(self):
        return self.host
于 2009-10-20T13:03:07.427 に答える