我意识到select_related仅适用于外键和一对一关系,但似乎应该有一种简单的,类似select_related的方式来连接多对多关系,这些关系是唯一的,只要一个给出了unique_together参数。
class User(models.Model):
article_access_set = models.ManyToManyField(Article,
through='UserArticleAccess', related_name='user_access_set')
# User Information ...
class Article(models.Model):
# Article Information ...
class UserArticleAccess(models.Model):
user = models.ForeignKey(User)
article = models.ForeignKey(Article)
# UserArticleAccess Information: flags, liked, last_access_time, ...
class Meta:
unique_together = ('user', 'article')
我正在寻找一种神奇的方法:
qs = Article.objects.all().magical_select_related(select={
'user_access_set': {'user': request.user}})
print qs[0].user_access_set
# <UserArticleAccess ...>
print qs[1].user_access_set # No Access
# None
或者也许:
qs = Article.objects.all().magical_select_related(select = {
'user_access_set': {'user': request.user}},
as = {'user_access_set': 'user_access'})
print qs[0].user_access
# <UserArticleAccess ...>
print qs[1].user_access # No Access
# None
有没有办法做到这一点? (或者这不应该以这种方式或类似方式实现的原因?)
答案 0 :(得分:0)
请看这篇文章Django : select_related with ManyToManyField。
prefetch_related()
可以在python中加入数据。
答案 1 :(得分:0)
使用Django 1.10,您可以使用django.db.models.fields.related.ForeignObject
类(它不是公共API)。
在https://groups.google.com/forum/#!topic/django-users/pGGHKb4Y8ZY
中查看有关此问题的对话您可以在以下提交的tests/foreign_object/tests.py
中看到示例:
https://github.com/django/django/commit/80dac8c33e7f6f22577e4346f44e4c5ee89b648c