Exercices Concepts Web & Django Definir un modèle Article
🎉

Bravo!

Intermédiaire 🧠 Fondamentaux 20 XP 0 personnes ont réussi

Definir un modèle Article

Un modèle Django est une classe Python qui représente une table dans la base de données. Chaque attribut du modèle correspond a une colonne de la table. Django s'occupe de tout le SQL : création de table, insertion, mise a jour, suppression.

Pour definir un modèle, tu créés une classe qui herite de django.db.models.Model :

from django.db import models

class Personne(models.Model):
nom = models.CharField(max_length=100)
age = models.IntegerField(default=0)
email = models.EmailField(unique=True)

class Meta:
app_label = 'test'

Les types de champs courants :
- CharField(max_length=N) : texte court (jusqu'a N caracteres)
- TextField() : texte long (sans limite)
- IntegerField() : nombre entier
- FloatField() : nombre decimal
- BooleanField(default=False) : vrai/faux
- DateTimeField(auto_now_add=True) : date/heure, automatiquement rempli a la création
- EmailField() : comme CharField mais avec validation email
- SlugField() : texte URL-friendly (lettres, chiffres, tirets)

La classe Meta interne permet de configurer le modèle. Pour nos exercices, on a toujours besoin de app_label = 'test' car on ne fait pas partie d'une vraie app Django.

Definis un modèle Article avec les champs :
- title : CharField, max 200 caracteres
- content : TextField
- author_name : CharField, max 100 caracteres
- is_published : BooleanField, défaut False
- created_at : DateTimeField, auto_now_add=True
- slug : SlugField, unique=True

Ajoute aussi une méthode __str__ qui retourne le titre de l'article.

Ajoute dans Meta : app_label = 'test' et ordering = ['-created_at']

Exemple :

fields = [f.name for f in Article._meta.get_fields()]
'title' in fields vaut True
Article._meta.ordering vaut ['-created_at']

Tests (4/5)

Champ title existe
fields = {f.name: f for f in Article._meta.get_fields()}
assert 'title' in fields
Champ content est TextField
field = Article._meta.get_field('content')
assert field.__class__.__name__ == 'TextField'
is_published default False
field = Article._meta.get_field('is_published')
assert field.default == False
slug est unique
field = Article._meta.get_field('slug')
assert field.unique == True

+ 0 tests cachés

Indices (3 disponibles)

solution.py