[PYTHON] Comment utiliser ManyToManyField avec l'administrateur de Django

Lorsque j'ai spécifié la colonne ManyToManyField dans list_display de admin.py, j'ai eu l'erreur suivante.

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.

J'ai pensé qu'il serait pratique de pouvoir lister les données d'une autre table liée à ManyToManyField pour un certain enregistrement sur le site de gestion, mais il semble que la spécification ne puisse pas être spécifiée en fonction du message d'erreur.

Cependant, c'était possible en faisant ce qui suit, donc je vais enregistrer la méthode.

Que veux-tu faire

Imaginez un exemple où des métadonnées sont ajoutées à un document, tel que Hatena Bookmark.

イメージ図

Comment répondre

Supposons que vous ayez trois auteurs, un article et une balise.

Article.meta est ManyToManyField et Tag est spécifié comme destination de la relation.

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

En définissant une fonction avec un nom arbitraire tel que _meta et en spécifiant le nom de la fonction correspondante dans list_display, il était possible de lister les données liées par des virgules comme indiqué dans la figure ci-dessus.

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)

Matériel de référence

Recommended Posts

Comment utiliser ManyToManyField avec l'administrateur de Django
Comment faire fonctionner GeoIp2 de Django
Python: comment utiliser async avec
Pour utiliser virtualenv avec PowerShell
Comment utiliser OpenVPN avec Ubuntu 18.04.3 LTS
Comment utiliser Cmder avec PyCharm (Windows)
Comment utiliser Ass / Alembic avec HtoA
Comment utiliser le japonais avec le tracé NLTK
Comment utiliser le notebook Jupyter avec ABCI
Comment utiliser la commande CUT (avec exemple)
Comment utiliser SQLAlchemy / Connect avec aiomysql
Comment afficher les images dans l'administration de Django
Comment utiliser le pilote JDBC avec Redash
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
Comment utiliser virtualenv
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment utiliser le shogun
Comment utiliser Pandas 2
Comment utiliser Virtualenv
Comment utiliser numpy.vectorize
Comment utiliser partiel
Comment utiliser Bio.Phylo
Comment utiliser SymPy
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment utiliser IPython
Comment utiliser virtualenv
Comment utiliser Matplotlib
Comment utiliser iptables
Comment utiliser numpy
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment utiliser la liste []
Comment utiliser python-kabusapi
Comment utiliser OptParse
Comment utiliser le retour
Comment utiliser pyenv-virtualenv
Comment utiliser imutils
Comment utiliser la trace GCP avec la télémétrie ouverte
Comment utiliser tkinter avec python dans pyenv
Comment utiliser Qt Designer
Comment utiliser xgboost: classification multi-classes avec des données d'iris
[gensim] Comment utiliser Doc2Vec
python3: Comment utiliser la bouteille (2)
Comprendre comment utiliser django-filter
Comment utiliser le générateur
[Python] Comment utiliser la liste 1
Comment obtenir un utilisateur connecté avec les forms.py de Django
La solution de contournement pour le modèle de Django n'existe pas
Comment utiliser FastAPI ③ OpenAPI
Comment utiliser le mode interactif python avec git bash
Comment utiliser Python Argparse