gpt4 book ai didi

python - Django:通用ListView,仅在通过ForeignKey在其他模型中时显示

转载 作者:行者123 更新时间:2023-11-30 22:08:43 25 4
gpt4 key购买 nike

我有两个模型:Creator 和 Piece。默认情况下,每个用户都是创建者。但只有当用户上传一个作品时,他才真正创建了一些东西。因此,我想在通用创建者 ListView 中仅显示那些上传了作品的创建者。如何过滤通用 ListView 以仅通过外键显示模型片段中存在的创建者?

models.py

class Creator(models.Model):
...
user = models.OneToOneField(User, on_delete=models.CASCADE)
...

class Piece(models.Model):
...
creator = models.ForeignKey('Creator', on_delete=models.SET_NULL, null=True)
...

views.py

class CreatorListView(generic.ListView):
model = Creator
paginate_by = 10

creator_list.html

{% block content %}
<h1>Creators</h1>
{% if creator_list %}
<ul>
{% for creator in creator_list %}
<li>
<a href="{{ creator.get_absolute_url }}">{{ creator }}</a>
</li>
{% endfor %}
</ul>
{% endif %}
{% endblock %}

最佳答案

您可以定义查询集,以便过滤掉没有相关CreatorPiece:

class CreatorListView(generic.ListView):
model = Creator
<b>queryset = Creator.objects.filter(piece__isnull=False).distinct()</b>
paginate_by = 10

Django 将创建一个如下所示的查询:

SELECT DISTINCT creator.*
FROM creator
LEFT OUTER JOIN piece ON piece.creator_id = creator.id
WHERE piece.id IS NOT NULL

(Django ORM 可能会将其优化为 JOIN 而不是 LEFT OUTER JOIN)。

因此,JOIN 将确保至少有一个相关的 Piece 对象。

关于python - Django:通用ListView,仅在通过ForeignKey在其他模型中时显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52103493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com