Django admin List Display + ForeignKey = Leere Änderungsliste

Ich habe ein seltsames Problem in django admin list_display . Wann immer ich einen Fremdschlüssel zu einer Liste hinzufügen, list_display die gesamte Änderungslistenansicht leer und zeigt nur die Gesamtzahl der Einträge an.

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) 

Jetzt würde ich erwarten, dass dieser Code mir den Organisationsnamen in der ChangeList View , aber stattdessen bekomme ich das:

Leere Änderungsliste :(

Wenn ich die org in der list_display der ServerAdmin Klasse beseitige, bekomme ich das:

Änderungsliste mit Daten :(

Ich habe die Vorlage nicht ModelAdmin oder alle ModelAdmin Methoden überschrieben. Ich benutze Mysql (5.1.58) als meine Datenbank, die mit ubuntu 11.10 Repository kommt.

Ich bin wirklich froh, wenn ich eine Schlange für dieses Problem bekommen könnte. Danke im Voraus.

  • Verbinden von Python, MySQL und HTML
  • Ist Tornado wirklich nicht blockierend?
  • Python mySQL - Escape-Zitate
  • Wie man einen Absatz mit Zeilenumbrüchen in django und mysql ausgibt?
  • Gibt es eine Möglichkeit, mehr als eine Abfrage pro String in MySQL-Python auszuführen?
  • Python pymysql set autocommit falsch scheitert
  • Weg zu verbessern oder zu beseitigen ein mysql COUNT
  • Installieren von mysql-python auf Centos
  • 4 Solutions collect form web for “Django admin List Display + ForeignKey = Leere Änderungsliste”

    Ich zweite Stefano auf die Tatsache, dass null=True, blank=True ist hinzuzufügen. Aber ich denke, du musst es nur dem org_name Feld des Organization hinzufügen. Das sollte dich durchmachen. Es muss getan werden, weil Sie inspectdb , um Modelle aus Ihrem Legacy-DB zu erstellen. Und wahrscheinlich ist die organization in der DB eine leere Zeichenfolge gespeichert. Also, das Hinzufügen der oben würde es dem Admin erlauben, ein leeres Feld / Spalte anzuzeigen.

    Darüber hinaus können Sie auch versuchen, Rückrufe in Situationen, in denen Sie nicht wollen, um Änderungen an Ihrer Modell-Definition wie die oben.

    Versuchen Sie, null=True, blank=True zu allen Ihren Modellfeldern hinzuzufügen.

    Normalerweise wird django admin silenty ausfallen (also keine Datensätze in der Liste anzeigen), wenn die Zeile die Modellbeschränkungen nicht validiert.

    Siehe: https://stackoverflow.com/a/163968/1104941

    Ist die folgende Arbeit für Sie?

    Admin.py:

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

    Ich hatte ein ähnliches Problem und löste es so (mit deinem Beispiel):

     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) 
    Python ist die beste Programmiersprache der Welt.