Als ich die ManyToManyField-Spalte in list_display von admin.py angegeben habe, wurde der folgende Fehler angezeigt.
django.core.management.base.SystemCheckError: SystemCheckError: System check identified some issues:
ERRORS:
<class 'proj.admin.ArticleAdmin'>: (admin.E109) The value of 'list_display[2]' must not be a ManyToManyField.
Ich dachte, es wäre praktisch, die Daten einer anderen mit ManyToManyField verknüpften Tabelle für einen bestimmten Datensatz auf der Verwaltungssite auflisten zu können, aber es scheint, dass die Spezifikation nicht gemäß der Fehlermeldung angegeben werden kann.
Es war jedoch möglich, die folgenden Schritte auszuführen, sodass ich die Methode aufzeichnen werde.
Stellen Sie sich ein Beispiel vor, in dem Metadaten zu einem Dokument hinzugefügt werden, z. B. Hatena Bookmark.
Angenommen, Sie haben drei Autoren, einen Artikel und ein Tag.
Article.meta ist ManyToManyField, und Tag wird als Beziehungsziel angegeben.
models.py
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=30)
def __unicode__(self):
return self.name
class Article(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey('Author', blank=True, null=True)
meta = models.ManyToManyField('Tag')
def __unicode__(self):
return self.title
class Tag(models.Model):
name = models.CharField(max_length=30)
def __unicode__(self):
return self.name
admin.py
Durch Definieren einer Funktion mit einem beliebigen Namen wie _meta und Angeben des entsprechenden Funktionsnamens in list_display konnten die durch Kommas verknüpften Daten wie in der obigen Abbildung dargestellt aufgelistet werden.
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'author', '_meta')
def _meta(self, row):
return ','.join([x.name for x in row.meta.all()])
admin.site.register(Article, ArticleAdmin)
Recommended Posts