【问题标题】:django - show objects of a single userdjango - 显示单个用户的对象
【发布时间】:2020-11-06 20:09:44
【问题描述】:

我有一个由不同用户创建的资产列表。我想在模板中显示每个用户的资产。

现在,我有这个(有更多代码,但与此问题无关):

models.py:

from django.db import models
from django.contrib.auth.models import User
from tinymce import models as tinymce_models
class Asset(models.Model):
     title = models.CharField(max_length=200)
     description = tinymce_models.HTMLField()
     dateadded = models.DateField(auto_now=True)
     user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
     file = models.FileField(upload_to='images/', verbose_name='Image', null=True, blank=True)
     url = models.URLField(max_length=500, blank=True, default='')

views.py

from .models import Asset
from django.contrib.auth.models import User
def assets(request):
    assets = Asset.objects
    users = User.objects
    context = {'assets':assets, 'users':users}
    return render(request, 'assets/assets.html', context)

但是我应该在我的模板中添加什么?以下给出了所有资产的列表,但第二部分应仅显示“bob”的资产,最终显示用户列出的所有资产(“bob”的所有资产,“pete”的所有资产等),无论用户是否签名在。

{% for asset in assets.all %}
{% if asset.file %}
{{ asset.dateadded_pretty }} - <a href="{% url 'detail' asset.id %}">{{ asset.title }}</a> <span style="font-size:11px">
  ({{ asset.ext }} - {{ asset.size }})</span>
{% else %}
{{ asset.dateadded_pretty }} - <a href="{% url 'detail' asset.id %}">{{ asset.title }}</a> <span style="font-size:11px">
  (external link)</span>
{% endif %}
<br>
{% endfor %}
<br><br><br>
Assets by Bob:

{% for asset in assets.all %}

{% if asset.user == "bob" %}
{{ user.title}}
{% endif %}

{% endfor %}

{% endblock %}

感谢您的指点!

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    首先查询视图中的所有用户

    def assets(request):
        assets = Asset.objects.all()
        users = User.objects.all()
        context = {'assets':assets, 'users':users}
    

    编辑:您可以过滤拥有此类资产的用户。

    users = User.objects.filter(id__in=assets)
    

    现在在模板中,您可以这样做以按个人用户获取资产

    {% for user in users %}
    {{user.email}}
    {% for asset in user.asset_set.all %}
    {{ asset.title}}
    {% endfor %}
    {% endfor %}
    

    【讨论】:

    • 谢谢,但这会产生错误:需要 2 个值才能在 for 循环中解压缩;得到 1 个。
    • 太棒了!到达那里:-) Obvs,这会重复每个资产的用户。我真正想要的是让用户提到一次,然后列出她/他的所有资产......编辑:只需在第一个 for 循环中移动 {{ user.email }} 就可以了。我展示了所有用户,包括没有资产的用户,但我想我可以用 {% if %} 解决这个问题。
    • 您可以在视图中执行此操作。检查答案@Thomas
    • 非常感谢,几个小时的挫败感消失了 :-)
    猜你喜欢
    • 2013-05-29
    • 1970-01-01
    • 2020-09-17
    • 2022-08-13
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2013-01-14
    相关资源
    最近更新 更多