Exercices Concepts Web & Django Modèle avec relations
🎉

Bravo!

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

Modèle avec relations

Les modèles Django peuvent avoir des relations entre eux, exactement comme les tables dans une base de données relationnelle.

Les trois types de relations :

ForeignKey (un-vers-plusieurs) : un article a UN auteur, mais un auteur peut avoir PLUSIEURS articles.

class Article(models.Model):
auteur = models.ForeignKey('Auteur', on_delete=models.CASCADE)

on_delete definit ce qui se passe quand l'objet référence est supprime :
- CASCADE : supprime aussi les objets lies
- SET_NULL : met la référence a null (necessite null=True)
- PROTECT : empeche la suppression

ManyToManyField (plusieurs-vers-plusieurs) : un article peut avoir PLUSIEURS tags, et un tag peut etre sur PLUSIEURS articles.

class Article(models.Model):
tags = models.ManyToManyField('Tag')

Definis trois modèles :

1. Author : name (CharField max 100), bio (TextField, blank=True)
2. Category : name (CharField max 50), slug (SlugField unique)
3. BlogPost : title (CharField max 200), content (TextField), author (ForeignKey vers Author, CASCADE), category (ForeignKey vers Category, SET_NULL, null=True, blank=True), tags (CharField max 200, blank=True, pour simplifier), is_published (BooleanField default False)

Chaque modèle a Meta avec app_label = 'test' et une méthode __str__ qui retourne le name ou le title.

Exemple :

Author._meta.get_field('name').max_length vaut 100
BlogPost._meta.get_field('author').related_model == Author vaut True

Tests (4/5)

Author a un champ name
field = Author._meta.get_field('name')
assert field.max_length == 100
Category a un slug unique
field = Category._meta.get_field('slug')
assert field.unique == True
BlogPost ForeignKey Author
field = BlogPost._meta.get_field('author')
assert field.related_model == Author
BlogPost category SET_NULL
from django.db import models as m
field = BlogPost._meta.get_field('category')
assert field.remote_field.on_delete == m.SET_NULL and field.null == True

+ 0 tests cachés

Indices (3 disponibles)

solution.py