Heim >Backend-Entwicklung >Python-Tutorial >Verwenden von Django-Fixtures mit Fremdschlüsseln ohne fest codierte IDs
Django-Fixtures vereinfachen das Laden von Beispieldaten, aber die Festcodierung von Fremdschlüssel-IDs führt zu Fragilität. Dieser Ansatz bricht zusammen, wenn sich IDs ändern oder Daten zwischen Datenbanken verschoben werden. Die Lösung? Natürliche Schlüssel. Sie ermöglichen es Ihnen, auf Fremdschlüssel mit aussagekräftigen Werten statt mit numerischen IDs zu verweisen.
Fest codierte Primärschlüssel in Vorrichtungen führen zu mehreren Problemen:
Natürliche Schlüssel beseitigen diese Probleme, indem sie es Django ermöglichen, Beziehungen dynamisch aufzulösen.
Die Verwendung natürlicher Schlüssel umfasst die folgenden Schritte:
natural_key()
-Methode: Fügen Sie in Ihrem zugehörigen Modell eine natural_key()
-Methode hinzu.Fügen Sie in models.py
eine natural_key()
-Methode zu dem Modell hinzu, auf das durch einen Fremdschlüssel verwiesen wird:
<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>
Dies ermöglicht die Referenzierung von Kategorien anhand ihrer name
statt ihrer ID innerhalb von Fixtures.
Verwenden Sie anstelle numerischer IDs den natürlichen Schlüssel, um auf Fremdschlüssel zu verweisen.
<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 findet die Kategorie automatisch anhand ihres name
.
Laden Sie das Gerät mit:
<code class="language-bash">python manage.py loaddata your_fixture.json</code>
Django verwendet get_by_natural_key()
, um Fremdschlüssel abzugleichen.
Nein. Selbst mit einem definierten natural_key()
können Sie weiterhin Folgendes verwenden:
Kombinieren Sie sie nach Bedarf.
Wann sollten natürliche Schlüssel verwendet werden?
Verwenden Sie natürliche Schlüssel, wenn:
Verwenden Sie numerische IDs, wenn:
Fazit
Natürliche Schlüssel in Django-Geräten verbessern die Flexibilität und Verwaltbarkeit der Daten. Anstatt sich auf potenziell sich ändernde IDs zu verlassen, löst Django Beziehungen dynamisch auf, was zu robusteren Fixtures führt. Integrieren Sie natürliche Schlüssel in Ihre Django-Projekte für eine einfachere Geräteverwaltung und weniger Probleme.
Das obige ist der detaillierte Inhalt vonVerwenden von Django-Fixtures mit Fremdschlüsseln ohne fest codierte IDs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!