كيف يمكنني استخدام جانغو مكتب إدارة السجلات الاستعلام هذا المثال، العديد من لكثير؟
-
22-08-2019 - |
سؤال
ولدي النماذج التالية:
class Author(models.Model):
author_name = models.CharField()
class Book(models.Model):
book_name = models.CharField()
class AuthorBook(models.Model):
author_id = models.ForeignKeyField(Author)
book_id = models.ForeignKeyField(Book)
ومع أن يقال، وأنا أحاول أن يحاكي هذا الاستعلام باستخدام جانغو مكتب إدارة السجلات (تحديد كافة الكتب التي ألفها كاتب معين، مشيرا إلى أن الكتاب يمكن أن يكون لها العديد من الكتب وكتب يمكن أن يكون لها العديد من الكتاب):
SELECT book_name
FROM authorbook, book
WHERE authorbook.author_id = 1
AND authorbook.book_id = book.id
ولقد قرأت هذه التعليمات الصفحة على موقع جانغو، ولكن قبل أن تعديل بلدي هيكل نموذج وإزالة AuthorBook، كان من الغريب إذا أنا يمكن أن تحاكي هذا الاستعلام باستخدام الهيكل الحالي.
المحلول
ويجب أن تكون قادرة على القيام به:
books = Book.objects.filter(authorbook__author_id=1)
للحصول على مجموعة طلبات البحث من كتاب الكائنات مطابقة تقييد author_id الخاص بك.
والشيء الجميل في جانغو هو يمكنك طهي هذا واللعب مع حولها في وعاء. قد تجد أيضا http://docs.djangoproject.com/ أون / ديف / المواضيع / ديسيبل / استفسارات / # الممتدة متعدد العلاقات ذات القيمة- أن تكون مفيدة.
نصائح أخرى
و"AuthorBook" لا يبدو على غرار بشكل صحيح.
ويجب عليك استخدام ManyToManyField
:
class Book(models.Model):
name = models.CharField()
authors = models.ManyToManyField(Author)
وبعد ذلك يمكنك القيام به:
books = Book.objects.filter(authors__id=1)