Django Admin List Display + ForeignKey = Пустой список изменений - PullRequest
7 голосов
/ 20 января 2012

У меня странная проблема с администратором django list_display. Всякий раз, когда я добавляю внешний ключ к list_display, весь список изменений становится пустым, показывая только общее количество записей.

models.py:

class Organization(models.Model):
    org_id = models.AutoField(primary_key=True)
    org_name = models.CharField(max_length=288)

    def __unicode__(self):
        return self.org_name

    class Meta:
        db_table = u'organization'

class Server(models.Model):
    server_id = models.AutoField(primary_key=True)
    server_name = models.CharField(max_length=135,verbose_name="Server Name")
    org = models.ForeignKey(Organization,verbose_name="Organization")   

    def __unicode__(self):
        return self.server_name

    class Meta:
        db_table = u'server'

admin.py:

class ServerAdmin(admin.ModelAdmin):
    list_display = ('server_name','org') 
admin.site.register(Server,ServerAdmin) 

Теперь я ожидаю, что этот код покажет мне название организации в ChangeList View, но вместо этого я получу это:

empty changelist :(

Если я уберу org в list_display из ServerAdmin класса, я получу это:

change list with data :(

Я не модифицировал шаблон и не переопределил методы ModelAdmin. Я использую Mysql (5.1.58) в качестве базы данных, которая поставляется с репозиторием Ubuntu 11.10.

Я буду очень рад, если я смогу получить решение этой проблемы, ребята. Заранее спасибо.

Ответы [ 4 ]

8 голосов
/ 22 января 2012

Я второй Стефано о том, что null=True, blank=True должно быть добавлено.Но я думаю, вам нужно только добавить его в поле org_name модели Organization.Это должно пробиться.Это должно быть сделано, потому что вы запустили inspectdb для создания моделей из вашей прежней БД.И, вероятно, в таблице organization в БД хранится пустая строка.Таким образом, добавление вышеуказанного позволит администратору отображать пустое поле / столбец.

Более того, вы также можете попробовать использовать callbacks в ситуациях, когда вы не хотите вносить изменения вопределение вашей модели, как указано выше.

3 голосов
/ 21 января 2012

Попробуйте добавить null=True, blank=True ко всем полям модели.

Обычно администратор django молча терпит неудачу (поэтому не показывает записей в списке), если строка не проверяет ограничения модели.

2 голосов
/ 21 января 2012

См .: https://stackoverflow.com/a/163968/1104941

Вам подходит следующее?

admin.py:

class ServerAdmin(admin.ModelAdmin):
    list_display = ('server_name','org__org_name') 
admin.site.register(Server,ServerAdmin) 
1 голос
/ 08 октября 2014

У меня была похожая проблема, и я решил ее следующим образом (на вашем примере):

class ServerAdmin(admin.ModelAdmin):
    list_display = ('server_name', 'get_org') 

    def get_org(self, obj):
        return obj.org.org_name

    get_org.short_description = 'Org'

admin.site.register(Server,ServerAdmin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...