[PYTHON] [Django] Gérez les paramètres comme l'écriture dans settings.py avec un modèle

Les paramètres utilisés par l'ensemble de l'application Web sont généralement définis dans settings.py.

Cependant, si vous modifiez fréquemment les paramètres ou si vous souhaitez que le client puisse les modifier facilement, il est utile de pouvoir les modifier sur le site d'administration de l'administrateur.

Méthode

étape 1

Ajoutez ce qui suit à settings.py

settings.py


INSTALLED_APPS = [
    ~~~~~
    'django.contrib.sites',  #ajouter à
]
SITE_ID = 1  #ajouter à

Étape 2

Ajoutez ce qui suit à models.py.

models.py


from django.contrib.sites.models import Site

class SiteDetail(models.Model):
    site = models.OneToOneField(Site, verbose_name='Site', on_delete=models.PROTECT)
    #Voici un exemple d'ajout des éléments définis
    DEFAULT_FROM_EMAIL = models.CharField('DEFAULT_FROM_EMAIL', max_length=255, blank=True)

Avec l'introduction du framework de sites fourni avec Django, un site se voit attribuer une donnée de site. En créant un modèle comme SiteDetail qui y est lié avec OneToOne, il semble que vous puissiez créer un modèle qui représente les paramètres de l'ensemble du site Web.

Étape 3

Ajoutez ce qui suit

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)

Étape 4

Ajoutez ce qui suit

settings.py


MIDDLEWARE = [
    ~~~~~~
    'django.contrib.sites.middleware.CurrentSiteMiddleware',  #ajouter à
]

Cela vous permettra d'accéder aux paramètres avec «{{request.site}}». Par exemple, {{request.site.sitedetail.DEFAULT_FROM_EMAIL}} peut être utilisé pour obtenir l'ensemble de courrier ci-dessus.

Étape 5

Ajoutez ce qui suit

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)

Cela permet de modifier le site et les détails du site en même temps.

Les références

Le contenu est presque le même que celui du site suivant, mais certaines parties ne fonctionnaient pas, alors je l'ai écrit en Qiita. https://narito.ninja/blog/detail/104/

Recommended Posts

[Django] Gérez les paramètres comme l'écriture dans settings.py avec un modèle
Implémenter un modèle utilisateur personnalisé dans Django
Démarrez Django dans un environnement virtuel à l'aide de Pipenv
Créez un environnement Django avec Vagrant en 5 minutes
Configurer un module avec plusieurs fichiers dans Django
Envoyer un e-mail avec un utilisateur autre que EMAIL_HOST_USER écrit dans les paramètres de django
Modifications du modèle dans Django
Comment utiliser fixture dans Django pour saisir des exemples de données associés au modèle utilisateur
Créez un indicateur dans les paramètres qui seront True uniquement lors du test avec Django
Essayez d'exécuter python dans l'environnement Django créé avec pipenv
[En une seule ligne] Visualisez comme une pelouse avec seulement des pandas
Créer une page d'accueil avec django
Jusqu'à ce que Django retourne quelque chose avec un robot de ligne!
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
recharger dans le shell django avec ipython
[python] Gérer les fonctions dans une liste
Gérer les fichiers de configuration Django avec Python-decouple
Déployer l'application Django avec Docker
Jointure externe gauche dans le modèle Django
Django Tips-Créez un site de classement avec Django-
Générer automatiquement un diagramme de relation de modèle avec Django
Créer une application Web avec Django
Créer un filtre avec un modèle django
Créer un itérateur de modèle avec PySide
API GraphQL utilisant graphene_django dans Django
Implémentation du bouton like dans Django + Ajax
Lors de l'écriture d'un programme en Python
Créer un téléchargeur de fichiers avec Django
Créer un bot LINE avec Django
Implémentation de la fonction d'authentification du modèle utilisateur personnalisé dans Django REST Framework à l'aide de djoser
Une série d'ingénieurs d'infrastructure amateurs touchant Django avec Docker (2): création d'un modèle
[Peut être fait en 10 minutes] Créez rapidement un site Web local avec Django
Aucune raison de penser en écrivant un robot avec Django et Celery
Je souhaite créer une API qui retourne un modèle avec une relation récursive dans Django REST Framework
Installer Django dans l'environnement virtuel pipenv
Livre en spirale en Python! Python avec un livre en spirale! (Chapitre 14 ~)
Django: la migration ne reflète pas le modèle dans DB
DJango Memo: depuis le début (réglage du modèle)
Lecteur RSS simple réalisé avec Django
Jouez comme une application Web avec ipywidgets
Utiliser un modèle scikit-learn formé à PySpark
Créez un modèle pour votre planning Django
Dessinez un cœur en rubis avec PyCall
Somme des variables dans un modèle mathématique
Créer un écran de connexion dans Django all auth
Spécifiez dynamiquement le jeu de requêtes ModelChoiceField dans Django
Obtenir un modèle de référence à l'aide de Django Serializer
Gérez les générations de rotation des journaux avec un script shell.
Remarques sur l'activation de PostgreSQL avec Django
Implémenter un modèle avec état et comportement
Essayez TensorFlow RNN avec un modèle de base
J'ai fait une application WEB avec Django
Si vous souhaitez afficher la valeur à l'aide des choix du modèle dans le modèle Django