Structure de la base de données
Schéma général
L’application utilise 3 modèles principaux organisés dans 2 applications Django :
Application ``letting`` : Gestion des biens immobiliers
Application ``profiles`` : Gestion des profils utilisateurs
Django ``auth`` : Modèle User standard de Django
Modèle Address
Application : letting
Description : Représente une adresse physique complète.
Champs :
Champ |
Type |
Description |
|---|---|---|
|
AutoField |
Clé primaire auto-incrémentée |
|
PositiveIntegerField |
Numéro de rue (max 9999) |
|
CharField(64) |
Nom de la rue |
|
CharField(64) |
Ville |
|
CharField(2) |
Code état US (ex: CA, NY) |
|
PositiveIntegerField |
Code postal (max 99999) |
|
CharField(3) |
Code pays ISO (ex: USA) |
Contraintes :
number: Valeur maximale 9999state: Exactement 2 caractèreszip_code: Valeur maximale 99999country_iso_code: Maximum 3 caractères
Méthode :
__str__(): Retourne le numéro et le nom de la rue
Exemple :
address = Address.objects.create(
number=123,
street="Main Street",
city="Los Angeles",
state="CA",
zip_code=90001,
country_iso_code="USA"
)
print(address) # "123 Main Street"
Modèle Letting
Application : letting
Description : Représente un bien immobilier disponible à la location.
Champs :
Champ |
Type |
Description |
|---|---|---|
|
AutoField |
Clé primaire auto-incrémentée |
|
CharField(256) |
Titre/nom du bien |
|
OneToOneField(Address) |
Adresse du bien (relation 1:1) |
Relations :
OneToOne avec Address : Chaque bien a une adresse unique, suppression en cascade
Contraintes :
title: Maximum 256 caractèresaddress: Clé étrangère obligatoire avecon_delete=CASCADE
Méthode :
__str__(): Retourne le titre du bien
Exemple :
letting = Letting.objects.create(
title="Beautiful Apartment",
address=address
)
print(letting) # "Beautiful Apartment"
print(letting.address.city) # "Los Angeles"
Modèle Profile
Application : profiles
Description : Profil utilisateur étendu lié au modèle User de Django.
Champs :
Champ |
Type |
Description |
|---|---|---|
|
AutoField |
Clé primaire auto-incrémentée |
|
OneToOneField(User) |
Utilisateur Django associé |
|
CharField(64) |
Ville préférée de l’utilisateur |
Relations :
OneToOne avec User : Chaque profil est lié à un utilisateur Django unique
Contraintes :
favorite_city: Maximum 64 caractères, peut être vide (blank=True)user: Clé étrangère obligatoire avecon_delete=CASCADE
Méthode :
__str__(): Retourne le username de l’utilisateur
Exemple :
from django.contrib.auth.models import User
user = User.objects.create_user(
username='john_doe',
email='john@example.com'
)
profile = Profile.objects.create(
user=user,
favorite_city='San Francisco'
)
print(profile) # "john_doe"
print(profile.favorite_city) # "San Francisco"
Diagramme de relations
┌──────────────┐
│ User │
│ (Django) │
└──────┬───────┘
│ 1:1
│
┌──────▼───────┐
│ Profile │
│ │
│ favorite_city│
└──────────────┘
┌──────────────┐ ┌──────────────┐
│ Letting │ 1:1 │ Address │
│ │◄──────│ │
│ title │ │ number │
└──────────────┘ │ street │
│ city │
│ state │
│ zip_code │
│ country_iso │
└──────────────┘
Migrations
Les migrations Django se trouvent dans :
letting/migrations/: Modèles Letting et Addressprofiles/migrations/: Modèle Profileoc_lettings_site/migrations/: Migrations legacy (site principal)
Commandes utiles
Créer une nouvelle migration :
python manage.py makemigrations
Appliquer les migrations :
python manage.py migrate
Afficher l’état des migrations :
python manage.py showmigrations
Revenir en arrière :
python manage.py migrate letting 0001
Charger les données de test :
python manage.py loaddata fixtures.json
Accès admin
Tous les modèles sont enregistrés dans l’interface Django Admin :
Lettings : http://localhost:8000/admin/letting/letting/
Addresses : http://localhost:8000/admin/letting/address/
Base de données en production
Développement : SQLite (oc-lettings-site.sqlite3)
Production : PostgreSQL sur Render
La connexion est gérée automatiquement via DATABASE_URL et dj-database-url.