[PYTHON] [Django] Verwalten Sie Einstellungen wie das Schreiben in settings.py mit einem Modell

Einstellungen, die von der gesamten Webanwendung verwendet werden, werden im Allgemeinen in settings.py vorgenommen.

Wenn Sie die Einstellungen jedoch häufig ändern oder wenn der Client sie problemlos ändern soll, ist es hilfreich, sie auf der Admin-Admin-Site ändern zu können.

Methode

Schritt 1

Fügen Sie der Datei settings.py Folgendes hinzu

settings.py


INSTALLED_APPS = [
    ~~~~~
    'django.contrib.sites',  #hinzufügen
]
SITE_ID = 1  #hinzufügen

Schritt 2

Fügen Sie models.py Folgendes hinzu.

models.py


from django.contrib.sites.models import Site

class SiteDetail(models.Model):
    site = models.OneToOneField(Site, verbose_name='Site', on_delete=models.PROTECT)
    #Das Folgende ist ein Beispiel für das Hinzufügen der festgelegten Elemente
    DEFAULT_FROM_EMAIL = models.CharField('DEFAULT_FROM_EMAIL', max_length=255, blank=True)

Mit der Einführung des mit Django gelieferten Site-Frameworks werden einem Site Standortdaten zugewiesen. Wenn Sie ein Modell wie SiteDetail erstellen, das mit OneToOne verknüpft ist, können Sie anscheinend ein Modell erstellen, das die Einstellungen der gesamten Website darstellt.

Schritt 3

Fügen Sie Folgendes hinzu

apps.py


from django.apps import AppConfig
from django.db.models.signals import post_migrate


class AppConfig(AppConfig):
    name = 'app'

    def ready(self):
        from .models import create_default_site_detail
        post_migrate.connect(create_default_site_detail, sender=self)

models.py


def create_default_site_detail(sender, **kwargs):
    site = Site.objects.get(pk=settings.SITE_ID)
    SiteDetail.objects.get_or_create(site=site)

Schritt 4

Fügen Sie Folgendes hinzu

settings.py


MIDDLEWARE = [
    ~~~~~~
    'django.contrib.sites.middleware.CurrentSiteMiddleware',  #hinzufügen
]

Auf diese Weise können Sie mit {{request.site}} auf die Einstellungen zugreifen. Zum Beispiel kann {{request.site.sitedetail.DEFAULT_FROM_EMAIL}} verwendet werden, um die oben eingestellte Mail abzurufen.

Schritt 5

Fügen Sie Folgendes hinzu

admin.py


from django.contrib import admin
from django.contrib.sites.models import Site
from .models import SiteDetail


class SiteDetailInline(admin.StackedInline):
    model = SiteDetail


class SiteAdmin(admin.ModelAdmin):
    inlines = [SiteDetailInline]


admin.site.unregister(Site)
admin.site.register(Site, SiteAdmin)

Auf diese Weise können Site und Site-Details gleichzeitig bearbeitet werden.

Verweise

Der Inhalt ist fast der gleiche wie auf der folgenden Seite, aber es gab einige Teile, die nicht funktionierten, also habe ich ihn in Qiita geschrieben. https://narito.ninja/blog/detail/104/

Recommended Posts

[Django] Verwalten Sie Einstellungen wie das Schreiben in settings.py mit einem Modell
Implementieren Sie ein benutzerdefiniertes Benutzermodell in Django
Starten Sie Django in einer virtuellen Umgebung mit Pipenv
Erstellen Sie mit Vagrant in 5 Minuten eine Django-Umgebung
Konfigurieren Sie ein Modul mit mehreren Dateien in Django
Senden Sie eine E-Mail mit einem anderen Benutzer als EMAIL_HOST_USER, der in den Einstellungen in Django geschrieben wurde
Modelländerungen in Django
Verwendung von Fixture in Django zur Eingabe von Beispieldaten für das Benutzermodell
Erstellen Sie ein Flag in den Einstellungen, das nur beim Testen mit Django True ist
Versuchen Sie, Python in der mit pipenv erstellten Django-Umgebung auszuführen
[In einer Zeile] Visualisiere wie ein Rasen mit nur Pandas
Erstellen Sie eine Homepage mit Django
Bis Django etwas mit einem Linienbot zurückgibt!
Ich habe mit Tkinter of Python ein Puzzlespiel (wie) gemacht
Laden Sie die Django-Shell mit ipython neu
[Python] Verwalten Sie Funktionen in einer Liste
Verwalten Sie Django-Konfigurationsdateien mit Python-Decouple
Stellen Sie die Django-Anwendung mit Docker bereit
Linke äußere Verbindung im Django-Modell
Django-Tipps - Erstellen Sie eine Ranking-Site mit Django-
Generieren Sie automatisch ein Modellbeziehungsdiagramm mit Django
Erstellen Sie eine Webanwendung mit Django
Machen Sie einen Filter mit einer Django-Vorlage
Erstellen Sie mit PySide einen Modelliterator
GraphQL-API mit graphene_django in Django
Implementierung der Like-Schaltfläche in Django + Ajax
Beim Schreiben eines Programms in Python
Erstellen Sie mit Django einen Datei-Uploader
Erstellen Sie mit Django einen LINE-Bot
Implementierung der benutzerdefinierten Authentifizierungsfunktion für Benutzermodelle in Django REST Framework mit djoser
Eine Reihe von Amateur-Infrastrukturingenieuren, die Django mit Docker berühren (2): Erstellen eines Modells
[Kann in 10 Minuten erledigt werden] Erstellen Sie schnell eine lokale Website mit Django
Kein Grund zum Nachdenken beim Schreiben eines Crawlers mit Django und Celery
Ich möchte eine API erstellen, die ein Modell mit einer rekursiven Beziehung im Django REST Framework zurückgibt
Installieren Sie Django in einer virtuellen Pipenv-Umgebung
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Django: Die Migration spiegelt nicht das Modell in der Datenbank wider
DJango Memo: Von Anfang an (Modelleinstellung)
Einfacher RSS-Reader mit Django
Spielen Sie wie eine Web-App mit ipywidgets
Verwenden Sie ein in PySpark geschultes Scikit-Lernmodell
Erstellen Sie ein Modell für Ihren Django-Zeitplan
Zeichne mit PyCall ein Herz in Ruby
Summe der Variablen in einem mathematischen Modell
Erstellen eines Anmeldebildschirms in Django all auth
Geben Sie das ModelChoiceField-Abfrageset in Django dynamisch an
Holen Sie sich ein Referenzmodell mit Django Serializer
Verwalten Sie Protokollrotationsgenerationen mit einem Shell-Skript.
Hinweise zum Aktivieren von PostgreSQL mit Django
Implementieren Sie ein Modell mit Status und Verhalten
Probieren Sie TensorFlows RNN mit einem Basismodell aus
Ich habe eine WEB-Bewerbung bei Django gemacht
Wenn Sie den Wert mithilfe von Auswahlmöglichkeiten in der Vorlage im Django-Modell anzeigen möchten