経緯
汎用詳細ビューでテンプレートから中間モデルのフィールドにアクセスする方法がわからなかったため、
調べたところ、良い方法が見つからなかったため。
django初心者につき、もっと良い方法があればご教示いただきたいです。
暫定解決方法
models.py
class Person(models.Model):
name = models.CharField(max_length=128)
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')
class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length=64)
カスタムフィルターを準備
extras.py
from django import template
register = template.Library()
@register.filter()
def get_relation_id(qs, group_id):
return qs.filter(group=group_id).get().id
@register.filter()
def get_relation_invite_reason(qs, group_id):
return qs.filter(group=group_id).get().invite_reason
フィルターを使用し、要素にアクセス
group_detail.html
{% for member in object.mermbers %}
<tr>
<td>{{ member.membership_set|get_relation_id:object.id }}</td>
<td>{{ member.membership_set|get_relation_invite_reason:object.id }}</td>
</tr>
{% endfor %}