python - Django 无法在模板中迭代 prefetch_lated 对象

标签 python django model prefetch

我无法在模板中访问 prefetch_lated 对象,smb 可以帮忙

View .py

def support(request, pk=None):
    ...
    else:
        list_support_tickets = sorted(
            chain(
                SupportTickets.objects.filter(Q(status=0) | Q(status=1), requester=request.user).prefetch_related('reply_relation'), #Can't iter object
            ), key=attrgetter('creation_date'), reverse=True
        )
        paginator = Paginator(list_support_tickets, 10)
        page = request.GET.get('page')
        support_tickets = paginator.get_page(page)
        args = {'support_tickets': support_tickets,
                'form': form
                }
        print(list_support_tickets)
        return render(request, template, args)

在我的模板中,我执行以下操作:

    {% for support_ticket in support_tickets %}
    ...
        {% for reply in support_ticket.reply_relation %}
            <span class="font-size-small">We have a query, yeah</span>
        {% endfor %}
    {% endfor %}

但是我无法在这里进行查询,错误:

TypeError: 'GenericRelatedObjectManager' object is not iterable

模型.py

class SupportTicketMessages(models.Model):
    content_type = models.ForeignKey(ContentType, limit_choices_to=referential_models, on_delete=models.CASCADE)
    object_id = models.CharField(max_length=36)
    content_object = GenericForeignKey('content_type', 'object_id')
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='support_ticket_reply_author', verbose_name='Author', blank=True)
    reply = models.TextField(verbose_name="Reply Content", max_length=2000)
    date = models.DateTimeField(auto_now_add=True, blank=False)


class SupportTickets(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True)
    ticket_id = models.IntegerField(default=ticket_id_generator, unique=True, blank=False, null=False, editable=False)
    requester = models.ForeignKey(User, on_delete=models.CASCADE, null=False, blank=False)
    category = models.IntegerField(choices=TICKET_CATEGORY, verbose_name='Ticket Category')
    subject = models.CharField(max_length=40)
    problem_description = models.TextField(max_length=5000)
    status = models.IntegerField(choices=STATUS_OF_TICKET, verbose_name='Ticket Status', default=0)
    reply_relation = GenericRelation(SupportTicketMessages, related_query_name='reply_relation')
    creation_date = models.DateTimeField(auto_now_add=True, null=True)

提前致谢

最佳答案

support_ticket.reply_relation 是一个 manager,而不是 QuerySet,因此您无法迭代它,您可以使用 .all() [Django-doc]迭代此:

{% for support_ticket in support_tickets %}
…
    {% for reply_relation in support_ticket<b>.reply_relation.all</b> %}
        …
    {% endfor %}
{% endfor %}

关于python - Django 无法在模板中迭代 prefetch_lated 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65295839/

相关文章:

python - 如何将 Bootstrap 样式添加到我的 Django 表单中?

ruby-on-rails - Rails 模型失败测试断言

python - Django 模型返回 NoneType

python - 消费者 : Cannot connect to amqp://guest:**@127. 0.0.1:5672//: [Errno 61] 连接被拒绝

django - 如何防止 Django 本地化模板中的 ID?

javascript - 将值设置为 Backbone.Model 中的折叠默认值

ruby-on-rails - 我应该在 Rails 中为 Redis 创建一个新类吗?

python - 使用 Pandas 数据框查找不同小数位的值

Python Matplotlib 按钮

Python/R : Remove duplicate rows - keep unique pairs of authors