Rumah >pembangunan bahagian belakang >Tutorial Python >Menggunakan Lekapan Django dengan Kekunci Asing Tanpa ID Berkod Keras

Menggunakan Lekapan Django dengan Kekunci Asing Tanpa ID Berkod Keras

DDD
DDDasal
2025-01-17 08:11:38347semak imbas

Using Django Fixtures with Foreign Keys Without Hardcoded IDs

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.


Mengapa Elakkan ID Kunci Asing Berkod Keras dalam Lekapan?

Kunci utama berkod keras dalam lekapan membawa kepada beberapa isu:

  • Ketidakkonsistenan pangkalan data merentas persekitaran yang berbeza.
  • Kegagalan lekapan disebabkan perubahan ID.
  • Meningkatkan usaha manual dalam mengurus perhubungan.

Kunci semula jadi menghapuskan masalah ini dengan membenarkan Django menyelesaikan perhubungan secara dinamik.


Melaksanakan Kunci Semula Jadi dalam Django

Menggunakan kekunci semula jadi melibatkan langkah berikut:

  1. Tentukan kaedah natural_key(): Dalam model berkaitan anda, tambahkan kaedah natural_key().
  2. Buat pengurus tersuai: Pengurus ini akan mengambil objek menggunakan kekunci semula jadi.
  3. Gunakan kunci asli dalam lekapan anda: Gantikan ID berangka dengan kunci asli.

Langkah 1: Menentukan Kunci Semulajadi dalam Model Berkaitan

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.


Langkah 2: Mencipta Lekapan Menggunakan Kekunci Semula Jadi

Daripada ID berangka, gunakan kekunci semula jadi untuk merujuk kekunci asing.

Contoh Lekapan (ID Angka – Kaedah Lapuk)

<code class="language-json">[
    {
        "model": "shop.category",
        "pk": 1,
        "fields": {
            "name": "Electronics"
        }
    },
    {
        "model": "shop.product",
        "fields": {
            "name": "Smartphone",
            "category": 1
        }
    }
]</code>

Contoh Lekapan (Kunci Asli – Kaedah Yang Diperbaiki)

<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 namenya.


Langkah 3: Memuatkan Lekapan

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.


Adakah Kunci Semulajadi Sentiasa Diperlukan?

Tidak. Walaupun dengan natural_key() yang ditakrifkan, anda masih boleh menggunakan:

  • ID berangka (pendekatan warisan).
  • Kunci semula jadi (lebih boleh disesuaikan).

Gabungkan mereka mengikut keperluan.


Bila Gunakan Kunci Asli?

Gunakan kekunci semula jadi apabila:

  • Keserasian lekapan merentas pangkalan data diperlukan.
  • Medan unik (cth., nama pengguna, slug, nama) wujud dalam model anda.
  • Penjejakan ID manual harus dielakkan.

Gunakan ID berangka apabila:

  • Tiada pengecam semula jadi yang unik wujud dalam model.
  • Bekerja dengan set data yang kecil dan tidak berubah.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn