Django est familier avec le framework Web de Python. Selon «SimilarTech, qui montre quand et quels outils ont été introduits sur quels sites», Django semble être en hausse, même si sa part est inférieure à Ruby On Rails dans la plupart des pays.
En passant, le public cible de cet article est pour ceux qui ont utilisé Django dans une certaine mesure et ceux qui comprennent le modèle MTV (ou MVC) dans une certaine mesure. Si vous ne l'avez pas encore touché, commencez par le tutoriel sur le Site officiel.
Tout d'abord, supposons que vous ayez les trois modèles suivants (tueur de démons, classe et respiration).
kimetsu_no_models.py
from django.db import models
class KisatsuMember(models.Model):
"""Modèle d'abattage de démon"""
id = models.UUIDField()
#Sexe ex)竈 MON, ma femme, papillon
last_name = models.CharField(max_length=20)
#Nom ex)Sumijiro, Zeni, Shinobu
first_name = models.CharField(max_length=20)
#classe
rank = models.ForeignKey(Rank, on_delete=models.PROTECT)
#Souffle
breath = models.ForeignKey(Breath, on_delete=models.PROTECT, null=True)
#Drapeau actif
is_active = models.BooleanField(default=True)
class Meta:
db_table = 'kisatsu_member'
class Rank(models.Model):
"""Modèle de classe"""
id = models.UUIDField()
#Nom de classe ex)Pilier, 癸
name = models.CharField(max_length=10)
class Meta:
db_table = 'rank'
class Breath(models.Model):
"""Modèle respiratoire"""
id = models.UUIDField()
#Nom du souffle ex)Eau, tonnerre, bête
name = models.CharField(max_length=10)
#Nombre de types ex) 6, 10, 11
number_of_types = models.IntegerField()
class Meta:
db_table = 'breath'
Le fait de référencer les valeurs du tableau du parent à l'enfant, par exemple du tueur de démon à la respiration, est appelé «référence directe». Par exemple, si vous voulez obtenir le nombre de noms, prénoms et types de démons massacreurs qui utilisent le souffle de «l'eau» dans l'ordre, ce sera comme suit.
mizu_no_views.py
water_breath_member = KisatsuMember.objects \
.filter(breath__name="eau") \
.values("last_name",
"first_name",
"breath__number_of_types")
print(water_breath_user)
# <QuerySet [{'last_name': 'Porte', 'first_name': 'Sumijiro', 'breath__number_of_types': 10},
# {'last_name': 'Cascade d'échelle', 'first_name': 'Sakonji', 'breath__number_of_types': 10},
# {'last_name': 'Tomioka', 'first_name': 'Yoshiyuki', 'breath__number_of_types': 11}]>
Publier la requête
mizu_no.sql
SELECT
kisatsu_member.last_name,
kisatsu_member.first_name,
breath.number_of_types
FROM
kisatsu_member
INNER JOIN
breath
ON kisatsu_member.breath_id = breath.id
WHERE
breath.name = 'eau'
;
Au contraire, la référence de l'enfant au parent et de la classe au démoniaque est appelée "référence inversée". Essayons maintenant une méthode d'acquisition un peu plus compliquée. Si vous voulez obtenir un nom de respiration autre que "eau" d'un démon masseur dont le rang est "pilier" et "actif", ce sera comme suit. La référence inverse est miso en ce qu'elle joint les noms de table sans trait de soulignement.
hashira_no_views.py
active_hashira_breathes = Rank.objects \
.filter(name="Pilier",
kisatsumember__is_active=True) \
.exclude(kisastumember__breath__name="eau") \
.values("kisastumember__breath__name")
print(active_hashira_breathes)
# <QuerySet [{'kisastumember__breath__name': 'flamme'},
# {'kisastumember__breath__name': 'amour'},
# {'kisastumember__breath__name': 'brume'}...]>
Publier la requête
hashira_no.sql
SELECT
breath.name
FROM
`rank`
INNER JOIN
kisatsu_member
ON kisatsu_member.rank_id = `rank`.id
INNER JOIN
breath
ON kisatsu_member.breath_id = breath.id
WHERE
`rank`.name = 'Pilier'
AND kisatsu_member.is_active = 1
AND breath.name <> 'eau'
;
Je ne peux écrire qu'en Python, mais je vais continuer à m'y consacrer!
Recommended Posts