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