Rumah >pembangunan bahagian belakang >Tutorial Python >Menggunakan Lekapan Django dengan Kekunci Asing Tanpa ID Berkod Keras
Lekapan Django memudahkan pemuatan data sampel, tetapi pengekodan keras ID kunci asing menimbulkan kerapuhan. Pendekatan ini terputus apabila ID berubah atau data bergerak antara pangkalan data. Penyelesaiannya? Kunci semula jadi. Mereka membenarkan anda merujuk kunci asing menggunakan nilai yang bermakna dan bukannya ID berangka.
Kunci utama berkod keras dalam lekapan membawa kepada beberapa isu:
Kunci semula jadi menghapuskan masalah ini dengan membenarkan Django menyelesaikan perhubungan secara dinamik.
Menggunakan kekunci semula jadi melibatkan langkah berikut:
natural_key()
: Dalam model berkaitan anda, tambahkan kaedah natural_key()
.Dalam models.py
, tambahkan kaedah natural_key()
pada model yang dirujuk oleh kunci asing:
<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>
Ini membolehkan kategori rujukan mengikut name
mereka dan bukannya ID mereka dalam perlawanan.
Daripada ID berangka, gunakan kekunci semula jadi untuk merujuk kekunci asing.
<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 mencari kategori secara automatik mengikut name
nya.
Muatkan lekapan menggunakan:
<code class="language-bash">python manage.py loaddata your_fixture.json</code>
Django menggunakan get_by_natural_key()
untuk memadankan kunci asing.
Tidak. Walaupun dengan natural_key()
yang ditakrifkan, anda masih boleh menggunakan:
Gabungkan mereka mengikut keperluan.
Bila Gunakan Kunci Asli?
Gunakan kekunci semula jadi apabila:
Gunakan ID berangka apabila:
Kesimpulan
Kunci semula jadi dalam lekapan Django meningkatkan fleksibiliti dan kebolehurusan data. Daripada bergantung pada ID yang berpotensi berubah, Django menyelesaikan perhubungan secara dinamik, menghasilkan lekapan yang lebih mantap. Masukkan kunci semula jadi ke dalam projek Django anda untuk pengurusan lekapan yang lebih mudah dan lebih sedikit isu.
Atas ialah kandungan terperinci Menggunakan Lekapan Django dengan Kekunci Asing Tanpa ID Berkod Keras. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!