如何在django中连接两个表

如何在django中连接两个表,django,postgresql,django-models,django-queryset,Django,Postgresql,Django Models,Django Queryset,我有两个模型,我想加入 class CollectionBook(models.Model): collection = models.ForeignKey('Collection') book = models.ForeignKey('Book') class Meta: unique_together = (('collection', 'book')) class Book(models.Model): main_author = mo

我有两个模型,我想加入

class CollectionBook(models.Model):
    collection = models.ForeignKey('Collection')
    book = models.ForeignKey('Book')

    class Meta:
        unique_together = (('collection', 'book'))


class Book(models.Model):
    main_author = models.ForeignKey('Author', verbose_name=u'Main author')
    publisher = models.ForeignKey('Publisher', verbose_name=u'Publisher')
    title = models.CharField(unique=False, max_length=255, verbose_name=u'Title')
    text = models.TextField(verbose_name=u'Book text', max_length=523000)
我试着这样做

book = Book.objects.extra(
                    select = {'id':'mainapp_collectionbook.book_id'})
book.query.join((None,'mainapp_collectionbook',None,None))

connection = (
      Book._meta.db_table,
      CollectionBook.book.field,
)
book.query.join(connection, promote=True)
但它不起作用,给了我错误
你能为我提供另一个解决这个问题的pythonic解决方案或改进我的方法吗?我不想编写sql查询,我希望有更好的django orm函数用于此

如果我理解正确,你可以尝试一下,但别忘了更改
you\u条件

allow_collections = CollectionBook.objects.filter(YOU_CONDITION)
books_pks = allow_collections.values_list('book__pk', flat=true)

Book.objects.filter(pk__in=books_pks)

从评论中得到澄清:

我还有一张“收藏”桌。我想选择允许收藏列表中藏书所属的藏书。我在此查询之前生成集合列表

首先,将显式的
CollectionBook
表替换为
Book
Collection
上的。对于本例,我将假定它位于
Book
上,因为这样可以使语法更清晰,并且不会显示
集合
模型

class Book(models.Model):
    main_author = models.ForeignKey('Author', verbose_name=u'Main author')
    publisher = models.ForeignKey('Publisher', verbose_name=u'Publisher')
    title = models.CharField(unique=False, max_length=255, verbose_name=u'Title')
    text = models.TextField(verbose_name=u'Book text', max_length=523000)
    collection = models.ManyToManyField('Collection')
然后,您可以使用
\uuu
语法来遵循以下关系:

Books.objects.filter(collection__in=SOME_LIST_OF_COLLECTIONS).distinct()

如果您需要有关书籍/收藏关系的其他信息,例如收集的日期或其他信息,请为
ManyToManyField

指定一个参数。请为查询集数据编写您想要的逻辑?我有另一个表“收藏”。我想选择允许收藏列表中藏书所属的藏书。我在此查询之前生成集合列表