Maison >développement back-end >Tutoriel Python >Utiliser des appareils Django avec des clés étrangères sans identifiants codés en dur
Les appareils Django simplifient le chargement des exemples de données, mais le codage en dur des ID de clé étrangère crée une fragilité. Cette approche s'interrompt lorsque les identifiants changent ou que les données sont déplacées entre les bases de données. La solution ? Clés naturelles. Ils vous permettent de référencer des clés étrangères en utilisant des valeurs significatives au lieu d'identifiants numériques.
Les clés primaires codées en dur dans les appareils entraînent plusieurs problèmes :
Les clés naturelles éliminent ces problèmes en permettant à Django de résoudre dynamiquement les relations.
L'utilisation de clés naturelles implique ces étapes :
natural_key()
: Dans votre modèle associé, ajoutez une méthode natural_key()
.Dans models.py
, ajoutez une méthode natural_key()
au modèle référencé par une clé étrangère :
<code class="language-python">from django.db import models class CategoryManager(models.Manager): def get_by_natural_key(self, name): return self.get(name=name) class Category(models.Model): name = models.CharField(max_length=255, unique=True) objects = CategoryManager() def natural_key(self): return (self.name,)</code>
Cela permet de référencer les catégories par leur name
au lieu de leur identifiant dans les appareils.
Au lieu d'identifiants numériques, utilisez la clé naturelle pour référencer les clés étrangères.
<code class="language-json">[ { "model": "shop.category", "pk": 1, "fields": { "name": "Electronics" } }, { "model": "shop.product", "fields": { "name": "Smartphone", "category": 1 } } ]</code>
<code class="language-json">[ { "model": "shop.category", "fields": { "name": "Electronics" } }, { "model": "shop.product", "fields": { "name": "Smartphone", "category": ["Electronics"] } } ]</code>
Django trouve automatiquement la catégorie par son name
.
Chargez le luminaire en utilisant :
<code class="language-bash">python manage.py loaddata your_fixture.json</code>
Django utilise get_by_natural_key()
pour faire correspondre les clés étrangères.
Non. Même avec un natural_key()
défini, vous pouvez toujours utiliser :
Combinez-les selon vos besoins.
Quand utiliser les clés naturelles ?
Utilisez des clés naturelles lorsque :
Utilisez des identifiants numériques lorsque :
Conclusion
Les clés naturelles dans les appareils Django améliorent la flexibilité et la gérabilité des données. Au lieu de s'appuyer sur des identifiants potentiellement changeants, Django résout les relations de manière dynamique, ce qui donne lieu à des appareils plus robustes. Incorporez des clés naturelles dans vos projets Django pour une gestion plus simple des appareils et moins de problèmes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!