[PYTHON] Implementieren Sie die Autovervollständigungsfunktion auf dem Django-Verwaltungsbildschirm

Wenn Sie ein Modell wie Eins-zu-Viele oder Viele-zu-Viele auf dem Django-Verwaltungsbildschirm erstellen, wird es standardmäßig im Pulldown-Format angezeigt. Es ist kein Problem, wenn es klein ist, aber es ist mühsam zu suchen, wenn die Menge steigt ... pulldown.png

In solchen Fällen scheint django-autocomplete-light, das die Autocomplete-Funktion implementieren kann, häufig installiert zu sein, aber die offizielle Django-Dokumentation Nachdem ich es sorgfältig gelesen hatte, stellte ich fest, dass "autocomplete_fields", das die automatische Vervollständigung implementieren kann, als Funktion bereitgestellt wird.

Bereiten Sie ein Modell vor

Dieses Mal verwende ich Django 3.0.7 und Python 3.7.2. Erstellen Sie zum besseren Verständnis zwei Apps, "Hund" und "Rasse", die den Namen und die Rasse des Hundes registrieren, und bereiten Sie jedes Modell vor.

$ python manage.py startapp dog
$ python manage.py startapp breed

dog/models.py


from django.db import models

from breed.models import Breed


class Dog(models.Model):
    name = models.CharField("Name", max_length=255, default="", blank=True)
    breed = models.ForeignKey(Breed, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

breed/models.py


from django.db import models


class Breed(models.Model):
    name = models.CharField("BreedName", max_length=255, default="", blank=True)

    def __str__(self):
        return self.name

Wenn ich jetzt einige Rassen registriere und versuche, einen Hund zu registrieren, bekomme ich viele Pulldowns wie das erste Bild.

Implementieren Sie die automatische Vervollständigung

Bearbeiten Sie jede admin.py, um die automatische Vervollständigung zu implementieren.

breed/admin.py


from django.contrib import admin

from .models import Breed


@admin.register(Breed)
class BreedAdmin(admin.ModelAdmin):
    search_fields = ('name',)

Geben Sie den zu suchenden Feldnamen in search_fiedls ein. Da es diesmal nur einen gibt, habe ich den Namen eingegeben.

dog/admin.py


from django.contrib import admin

from .models import Dog


@admin.register(Dog)
class DogAdmin(admin.ModelAdmin):
    autocomplete_fields = ('breed',)

Geben Sie für Hund die Felder an, in denen Sie die automatische Vervollständigung mit "autocomplete_fields" implementieren möchten. Nur das! Wahnsinnig einfach.

Wenn ich den Verwaltungsbildschirm überprüfe autocomplete.png Ein Eingabefeld wurde vorbereitet, damit Sie richtig filtern können.

Übrigens habe ich diesmal ForeignKey angegeben, aber es gibt kein Problem mit ManyToManyField.

dog/models.py


from django.db import models

from breed.models import Breed


class Dog(models.Model):
    name = models.CharField("Name", max_length=255, default="", blank=True)
    breed = models.ManyToManyField(Breed)

    def __str__(self):
        return self.name

autocomplete2.png

Referenzinformationen

Django-Dokumentation --ModelAdmin.autocomplete_fields

Recommended Posts

Implementieren Sie die Autovervollständigungsfunktion auf dem Django-Verwaltungsbildschirm
Passen Sie die Modellseite des Django-Verwaltungsbildschirms an
Die Geschichte, dass "calendar.day_abbr" auf dem Admin-Bildschirm von django nicht aktualisiert werden konnte
So registrieren Sie nur eine Daten auf dem Django-Verwaltungsbildschirm
Verknüpfen Sie das Element list_display in Djangos Model Admin
So filtern Sie die externen Schlüssel, die auf dem Django-Verwaltungsbildschirm ausgewählt werden können
Implementieren Sie REPL