[PYTHON] Verwendung von ManyToManyField mit Djangos Admin

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.

Was willst du tun

Stellen Sie sich ein Beispiel vor, in dem Metadaten zu einem Dokument hinzugefügt werden, z. B. Hatena Bookmark.

イメージ図

Wie soll man antworten

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)

Referenzmaterial

Recommended Posts

Verwendung von ManyToManyField mit Djangos Admin
So bedienen Sie GeoIp2 von Django
Python: So verwenden Sie Async mit
So verwenden Sie virtualenv mit PowerShell
Verwendung von OpenVPN mit Ubuntu 18.04.3 LTS
Verwendung von Cmder mit PyCharm (Windows)
Wie man Ass / Alembic mit HtoA benutzt
Verwendung von Japanisch mit NLTK-Plot
Verwendung des Jupyter-Notebooks mit ABCI
Verwendung des CUT-Befehls (mit Beispiel)
Verwendung von SQLAlchemy / Connect mit aiomysql
So zeigen Sie Bilder in Djangos Admin an
Verwendung des JDBC-Treibers mit Redash
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
Verwendung von virtualenv
Wie benutzt man Seaboan?
Verwendung von Image-Match
Wie man Shogun benutzt
Verwendung von Pandas 2
Verwendung von Virtualenv
Verwendung von numpy.vectorize
Wie man teilweise verwendet
Wie man Bio.Phylo benutzt
Verwendung von SymPy
Wie man x-means benutzt
Verwendung von WikiExtractor.py
Verwendung von IPython
Verwendung von virtualenv
Wie benutzt man Matplotlib?
Verwendung von iptables
Wie benutzt man numpy?
Verwendung von TokyoTechFes2015
Wie benutzt man venv
Verwendung des Wörterbuchs {}
Wie benutzt man Pyenv?
Verwendung der Liste []
Wie man Python-Kabusapi benutzt
Verwendung von OptParse
Verwendung von return
Wie man Imutils benutzt
Verwendung der GCP-Ablaufverfolgung mit offener Telemetrie
Wie man tkinter mit Python in Pyenv benutzt
Verwendung von Qt Designer
Verwendung von xgboost: Mehrklassenklassifizierung mit Irisdaten
[gensim] Verwendung von Doc2Vec
python3: Verwendung der Flasche (2)
Verstehen Sie, wie man Django-Filter verwendet
Verwendung des Generators
[Python] Verwendung von Liste 1
So erhalten Sie einen angemeldeten Benutzer mit Djangos forms.py
Problemumgehung für Djangos Vorlage existiert nicht
Verwendung von FastAPI ③ OpenAPI
Verwendung des interaktiven Python-Modus mit Git Bash
Wie benutzt man Python Argparse?