Djangoでそのような関係があるとしましょう。
メモ モデルは、content_object 記事 (またはその他のモデル) で指定されたユーザー メモを保存するために使用されます。ポイントは、メモフィールドを追加するメソッドを作成せずに、現在ログインしているユーザーのすべての記事にメモフィールドを追加することです。
for article in article_list:
article.notes = Note.objects.get(author=self.request.user, content_object=article)
# this is bad
今のところ、カスタム マネージャー + ジェネリック リレーションを記事に追加しようとしています。
記事.py
class Article(models.Model):
user = models.ForeignKey(User)
...
notes = generic.GenericRelation(Note)
Note.py
class Note(models.Model):
author = models.ForeignKey(User)
...
objects = CustomManager()
class CustomManager(models.Manager):
def for_user(self, user):
return super(CustomManager, self).get_query_set().filter(author=user)
このアイデアはうまくいくかもしれませんが、すべてのメモに対してのみ、テンプレートでこれを行うことはできません:(
template.html
{% for article in article_list %}
{{ article.content }}
{% for note in article.notes.for_user(user) %}
{{ note.content }}
{% endfor %}
{% endfor %}
<!-- where user is currently logged user !>
ユーザー ノートを記事のクエリセットに「接着」するエレガントな方法を探しています。