Bonjour,
Je travaille avec Python 3.5 et Django 1.10 et je me retrouve avec le problème suivant. J’ai une classe Member
qui représente un membre de mon association. En particulier, cette personne dispose d’une adresse. En France, elle serait du type (street, postcode, city)
.
Or, pour plus de flexibilité, je souhaiterais pouvoir rendre le type d’adresse configurable (par exemple, si quelqu’un souhaite ajouter un attribut numero
). Je pensais donc permettre à l’utilisateur de l’app de définir un mixin dans le fichier settings.py
, dont mon model Member
hériterait :
user_app/models/postal_address.py :
1 2 3 4 5 | class PostalAddressMixin(models.Model): # ... class Meta: abstract = True |
settings.py :
1 2 | import user_app PostalAddressMixin = user_app.models.postal_address.PostalAddressMixin |
app/models/member.py :
1 2 | class Member(settings.PostalAddressMixin): # ... |
Seulement, Django me dit django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
lors de l’exécution de la commande ./manage.py makemigrations user_app
.1 D’ailleurs, je n’ai pas vu de méthode similaire sur le web, donc j’imagine qu’elle est mauvais.
Une autre solution serait de procéder ainsi :
1 2 3 | class Member(models.Model): # ... address = models.OneToOneField(settings.POSTAL_ADDRESS_MODEL) |
1 | POSTAL_ADDRESS_MODEL = 'user_app.models.PostalAddress' |
Seulement, ça implique que mon modèle PostalAddress
a une existence propre, que je peux en créer des instances non rattachées à un membre, ce qui n’a pas de sens. Et puis c’est beaucoup moins naturel dans le site d’administration de renseigner l’adresse via une clé étrangère.
Auriez-vous des conseils à ce sujet ?
Merci.
-
Edit : il semblerait que ce soit dû au fait que
user_app/__init__.py
contenaitfrom . import models
. ↩