select_related は外部キーと 1 対 1 の関係でのみ機能することを認識していますが、unique_together の 1 つを除いてすべてを提供する、一意である多対多の関係を結合する単純な select_related のような方法があるはずですパラメータが与えられます。
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
これを行う方法はありますか?(または、これがこの方法または同様の方法で実装されるべきではない理由ですか?)