Django - 获取与多对多字段反向相关的模板
Django - get in template reverse related many to many field
我有 3 个模型,Entry 模型和 Category 模型,我创建了中间模型 CategoryEntry。
class Entry(models.Model):
entry_text = models.TextField()
user = models.ForeignKey(User)
class Category(models.Model):
user = models.ForeignKey(User)
category_text = models.CharField(max_length=200)
entries = models.ManyToManyField(Entry, through='CategoryEntry')
class CategoryEntry(models.Model):
category = models.ForeignKey(Category)
entry = models.ForeignKey(Entry)
viewed = models.BooleanField(default=False)
我已经用 get_queryset 这样的方法创建了一个视图
def get_queryset(self):
order_by = self.request.GET.get('order_by')
if not order_by:
order_by = '-pub_date'
return Entry.objects.filter(category__id=self.kwargs.get('category_id', None), category__user__id=self.request.user.id).order_by(order_by)[:].select_related('user')
我有来自 kwargs 的类别 ID。问题是 - 如何获取每个条目相关字段 "viewed",以便我可以在模板中显示它的值。例如相关的 User 字段我可以得到 like
{% for entry in entries %}
{{ entry.entry_text }}
{{ entry.user.name }}
{% endfor %}
我需要访问 "viewed" 字段,例如 "entry.categoryentry.viewed"
已尝试 prefetch_related,但似乎不起作用或不知道如何知道正确的名称以访问模板中的字段
Entry.objects.filter(category__id=self.kwargs.get('category_id', None), category__user__id=self.request.user.id).order_by(order_by)[:].select_related('user').prefetch_related(Prefetch("categoryentry_set", queryset=CategoryEntry.objects.filter(category__id=self.kwargs.get('category_id', None))))
谢谢!
你会这样做:
{% for entry in entries %}
{{ entry.entry_text }}
{{ entry.user.name }}
{% for ce in entry.catalogentry_set.all %}
{{ce.category.category_text}}
{# or whatever.. #}
{% endfor %}
{% endfor %}
基本上,如果不存在 related_name
,您可以通过 lowercase model name + _set
访问反向查找元素 - returns 一个查询集管理器对象。
我有 3 个模型,Entry 模型和 Category 模型,我创建了中间模型 CategoryEntry。
class Entry(models.Model):
entry_text = models.TextField()
user = models.ForeignKey(User)
class Category(models.Model):
user = models.ForeignKey(User)
category_text = models.CharField(max_length=200)
entries = models.ManyToManyField(Entry, through='CategoryEntry')
class CategoryEntry(models.Model):
category = models.ForeignKey(Category)
entry = models.ForeignKey(Entry)
viewed = models.BooleanField(default=False)
我已经用 get_queryset 这样的方法创建了一个视图
def get_queryset(self):
order_by = self.request.GET.get('order_by')
if not order_by:
order_by = '-pub_date'
return Entry.objects.filter(category__id=self.kwargs.get('category_id', None), category__user__id=self.request.user.id).order_by(order_by)[:].select_related('user')
我有来自 kwargs 的类别 ID。问题是 - 如何获取每个条目相关字段 "viewed",以便我可以在模板中显示它的值。例如相关的 User 字段我可以得到 like
{% for entry in entries %}
{{ entry.entry_text }}
{{ entry.user.name }}
{% endfor %}
我需要访问 "viewed" 字段,例如 "entry.categoryentry.viewed"
已尝试 prefetch_related,但似乎不起作用或不知道如何知道正确的名称以访问模板中的字段
Entry.objects.filter(category__id=self.kwargs.get('category_id', None), category__user__id=self.request.user.id).order_by(order_by)[:].select_related('user').prefetch_related(Prefetch("categoryentry_set", queryset=CategoryEntry.objects.filter(category__id=self.kwargs.get('category_id', None))))
谢谢!
你会这样做:
{% for entry in entries %}
{{ entry.entry_text }}
{{ entry.user.name }}
{% for ce in entry.catalogentry_set.all %}
{{ce.category.category_text}}
{# or whatever.. #}
{% endfor %}
{% endfor %}
基本上,如果不存在 related_name
,您可以通过 lowercase model name + _set
访问反向查找元素 - returns 一个查询集管理器对象。