J'ai déjà posé des questions pour ce projet, concernant Django Admin, Inlines, Generics, etc. Merci encore aux personnes qui ont contribué à ces réponses. Pour des informations, ces questions sont ici:Django Model Design
Django - Designing Model Relationships - Admin interface and Inline
Django Generic Relations with Django Admin
Cependant, je pense que je devrais probablement revoir à nouveau mon modèle, pour vous assurer qu'il est réellement « correct ». Donc, l'accent est mis ici sur la conception de la base de données, je suppose.
Nous avons une application Django avec plusieurs objets - Utilisateurs (qui ont un profil d'utilisateur), hôpitaux, départements, institutions (c'est-à-dire établissements d'enseignement) - tous ayant plusieurs adresses (ou aucune adresse). Il est probable que beaucoup d'entre eux auront plusieurs adresses.
Il est également possible que plusieurs objets aient la même adresse, mais c'est rare, et je suis heureux d'avoir la duplication pour les cas où cela se produit.
Actuellement, le modèle est:
class Address(models.Model):
street_address = models.CharField(max_length=50)
suburb = models.CharField(max_length=20)
state = models.CharField(max_length=3, choices=AUSTRALIAN_STATES_CHOICES)
...
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
...
class Hospital(models.Model):
name = models.CharField(max_length=20)
address = generic.GenericRelation(Address)
...
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
address = generic.GenericRelation(Address)
...
Tout d'abord - ce que je fais ce droit, avec le champ FK sur chaque objet qui a l'adresse (s)? Deuxièmement, y a-t-il une meilleure alternative à l'utilisation de relations génériques pour ce cas, où différents objets ont tous des adresses? Dans l'autre article, quelqu'un a mentionné l'utilisation de classes abstraites - j'ai pensé à cela, mais il semble y avoir beaucoup de duplication, puisque le modèle d'adresses est fondamentalement identique pour tous. De plus, nous utiliserons fortement l'administrateur de Django, donc il doit fonctionner avec cela, de préférence aussi avec l'adresse comme inline. (C'est là que je rencontrais un problème - parce que j'utilisais des relations génériques, l'administrateur de Django attendait quelque chose dans les champs content_type et object_id, et faisait une erreur quand ils étaient vides, au lieu de donner une sorte de recherche).
Cheers, Victor