解决方案:django exceptions.FieldError(\'Perhubungan mempunyai berbilang medan sasaran, tetapi hanya medan sasaran tunggal \'\'diminta\')

王林
Lepaskan: 2024-02-29 22:34:02
ke hadapan
1259 orang telah melayarinya

解决方案:django exceptions.FieldError(

Sebab ralat

FieldError("Relation mempunyai berbilang medan sasaran, tetapi hanya medan sasaran tunggal diminta") Ralat ini biasanya disebabkan apabila anda cuba mengakses medan yang berkaitan objek. Objek sebenarnya mempunyai pelbagai medan sasaran.

Sebagai contoh, katakan anda mempunyai model `Pengarang` dan model `Buku`, dan terdapat hubungan banyak-ke-banyak antara mereka. Ralat ini berlaku jika anda cuba mengakses medan `buku` objek `Pengarang`, tetapi objek yang berkaitan sebenarnya dikaitkan dengan berbilang objek `Buku`.

Untuk menyelesaikan masalah ini, anda perlu menukar kod anda untuk menggunakan cara untuk mengakses berbilang medan sasaran. Sebagai contoh, anda boleh menggunakan `Author.book_set.all()` untuk mendapatkan semua objek `Book` bagi objek `Author`.

Semoga maklumat di atas dapat membantu anda menyelesaikan masalah tersebut.

Cara menyelesaikan

Untuk menyelesaikan ralat FieldError("Perkaitan mempunyai berbilang medan sasaran, tetapi hanya medan sasaran tunggal diminta"), anda perlu menukar kod anda untuk menggunakan cara mengakses berbilang medan sasaran. Secara khusus, anda boleh menggunakan salah satu kaedah berikut:

- Gunakan atribut `related_name` untuk menentukan nama tersuai untuk mengakses objek yang berkaitan. Sebagai contoh, anda boleh menentukan `related_name='books'` apabila mentakrifkan perhubungan banyak-ke-banyak, dan kemudian gunakan `Author.books.all()` untuk mendapatkan semua objek `Book` bagi objek `Author`.

- Gunakan set pertanyaan `related_objects` Django untuk mengakses objek berkaitan. Sebagai contoh, anda boleh menggunakan `Author.related_objects.all()` untuk mendapatkan semua objek berkaitan objek `Author`.

- Gunakan parameter `through` DjanGo untuk mencipta model perantaraan dan gunakan model perantaraan ini untuk mengakses objek berkaitan. Sebagai contoh, andaikan anda telah menentukan model perantaraan `BookAuthor`, maka anda boleh menggunakan `Author.bookauthor_set.all()` untuk mendapatkan semua objek `BookAuthor` objek `Author`, dan kemudian mengakses setiap objek `BookAuthor` ` medan book` untuk mendapatkan objek `Book` yang sepadan.

Anda mungkin perlu nyahpepijat kod anda untuk mengetahui masalah yang berlaku. Berikut ialah beberapa langkah yang boleh membantu:

- Pastikan medan anda yang berkaitan adalah betul. Contohnya, jika anda mentakrifkan perhubungan banyak-ke-banyak, anda harus menggunakan medan `ManyToManyField` untuk mewakili perhubungan, bukannya `ForeignKey` atau `OneToOneField`.

- Pastikan objek berkaitan anda disediakan dengan betul. Sebagai contoh, jika anda mempunyai hubungan banyak-ke-banyak, anda harus menentukan medan `ManyToManyField` antara setiap model dan menentukan yang lain sebagai parameter `related_name`.

- Jika anda menggunakan model perantaraan untuk mewakili perkaitan anda, pastikan anda telah mentakrifkan model perantaraan dengan betul dan menentukan parameter `melalui` yang betul.

- Jika anda menggunakan nama tersuai untuk mengakses objek berkaitan, pastikan anda telah menentukan parameter `related_name` dengan betul.

- Cuba gunakan penyahpepijatan Django alat untuk melihat sama ada set pertanyaan anda betul. Contohnya, anda boleh menggunakan sifat `.query` untuk melihat penyataan sql yang dijana atau `print(list(qs))` untuk melihat objek yang terkandung dalam set pertanyaan.

Semoga maklumat di atas dapat membantu anda.

Contoh Penggunaan

Berikut ialah contoh, katakan anda mempunyai model `Buku` dan model `Pengarang`, dan anda ingin mentakrifkan perhubungan banyak-ke-banyak, membenarkan berbilang buku mempunyai berbilang pengarang, dan setiap Pengarang boleh menulis pelbagai buku:

class Author(models.Model):
name = models.CharField(max_length=100)

class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author, related_name='books')
Salin selepas log masuk

Kini anda boleh mengakses objek berkaitan melalui:

# 获取书的所有作者
book.authors.all()

# 获取作者写的所有书
author.books.all()
Salin selepas log masuk

Jika anda menghadapi masalah semasa mentakrifkan medan hubungan, seperti menggunakan jenis medan yang salah (contohnya, menggunakan `ForeignKey` dan bukannya `ManyToManyField`), maka anda mungkin menerima ralat yang serupa dengan maklumat "Perhubungan mempunyai berbilang medan sasaran" . Dalam kes ini, anda harus menyemak kod anda untuk memastikan anda menggunakan jenis medan yang betul.

Jika anda menghadapi masalah mengakses objek yang berkaitan, seperti menggunakan nama yang salah (cth. cuba menggunakan `book.authors` dan bukannya `book.authors.all()` untuk mendapatkan senarai pengarang), maka anda mungkin menerima kepada mesej ralat yang serupa dengan "Kaedah ini mesti dilaksanakan oleh subkelas". Dalam kes ini, anda harus menyemak kod anda untuk memastikan anda menggunakan kaedah yang betul untuk mengakses perkaitan Maaf, tetapi saya tidak tahu apa yang anda tanyakan. Anda boleh terus bertanya soalan anda dan saya akan cuba sedaya upaya untuk menjawab anda.

Atas ialah kandungan terperinci 解决方案:django exceptions.FieldError(\'Perhubungan mempunyai berbilang medan sasaran, tetapi hanya medan sasaran tunggal \'\'diminta\'). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:lsjlt.com
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan