python - Dove dovrebbe vivere il codice manager di Django?




design-patterns django-models django-managers (5)

La soluzione migliore con un ampio set di modelli consiste nell'utilizzare i moduli django a proprio vantaggio e semplicemente creare una cartella denominata modelli. Sposta la tua vecchia models.py in questa cartella di modelli e rinominala __init__.py . Ciò ti consentirà di separare ciascun modello in file più specifici all'interno di questa cartella del modello.

Dovresti quindi solo importare ciascun modello nello spazio dei nomi __init__.py .

Quindi, ad esempio, potresti volerlo separare in:

yourapp/
    models/
        __init__.py # This file should import anything from your other files in this directory
        basic.py # Just an example name
        morespecificmodels.py # Just an example name
        managers.py # Might want to separate your manager into this

Quindi il tuo __init__.py può essere solo:

from basic import * # You should replace * with each models name, most likely.
from managers import YourManager # Whatever your manager is called.

Questa è la struttura che utilizzo quando i miei file di modello diventano enormi, tuttavia cerco di separare le cose in app più collegabili il più spesso possibile, quindi è raramente usato da me.

Spero che questo ti aiuti.

Questa è una domanda di modelli di django piuttosto semplice. Il mio codice manager di solito vive in models.py, ma cosa succede quando models.py è davvero enorme? Esiste un altro modello alternativo per far vivere il codice del gestore in models.py per la gestibilità e per evitare le importazioni circolari?

Ci si potrebbe chiedere come mai models.py sia così grande, ma supponiamo che le dimensioni e l'ampiezza dell'utilità siano giustificate.


Metto sempre il mio in managers.py. Se si dispone di un problema di importazione circolare, ricordare che a) È possibile fare riferimento alla classe del modello per un gestore su self.model e b) È possibile eseguire importazioni all'interno delle funzioni.


Preferisco mantenere i miei modelli in models.py e manager in managers.py (forms in forms.py) tutti all'interno della stessa app. Per i gestori più generici, preferisco tenerli in core.managers se possono essere riutilizzati per altre app. In alcune delle nostre app più grandi con model / modelname.py che conterrà un gestore e il codice del modello che non sembra male.


Quello che ho fatto durante la creazione di app Django è stato quello di creare un file [modelname] .py con solo il codice del modello specifico, il codice gestore e talvolta il codice del modulo e usato un file __init__.py per importarlo poi tutti nella directory dei modelli. Questo mi ha aiutato almeno a mantenerlo gestibile.






python django design-patterns django-models django-managers