我有2个模特,我想加入
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函数用于此
答案 0 :(得分:1)
从评论中澄清:
我有另一张桌子" Collection"。我想要选择书籍所属的集合所在的书籍。我在此查询之前生成了集合列表
首先,使用CollectionBook
或Book
上的ManyToManyField
替换您的明确Collection
表格。对于此示例,我假设它在Book
上,因为这样可以使语法更清晰,并且Collection
模型不会显示。
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')
然后您可以使用__
语法来关注关系:
Books.objects.filter(collection__in=SOME_LIST_OF_COLLECTIONS).distinct()
如果您需要有关图书/馆藏关系的其他信息,例如EG收集的日期或其他内容,请为ManyToManyField
指定through
参数。
答案 1 :(得分:0)
如果我理解正确,您可以尝试,但不要忘记更改bindParam
YOU_CONDITION