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.
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.
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')
Kini anda boleh mengakses objek berkaitan melalui:
# 获取书的所有作者 book.authors.all() # 获取作者写的所有书 author.books.all()
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!