كيف يمكنني استخدام جانغو مكتب إدارة السجلات الاستعلام هذا المثال، العديد من لكثير؟

StackOverflow https://stackoverflow.com/questions/533726

  •  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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top