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 ...
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.
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.
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 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
Django-Dokumentation --ModelAdmin.autocomplete_fields
Recommended Posts