检查一个模型的记录是否存在于Djang中另一个模型的记录列表中

2024-06-16 11:14:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Django定义了两个简单的模型。。。一个包含相册名称,另一个链接相册和用户。你知道吗

class Album(models.Model):
    name = models.CharField(max_length=255)

class UserAlbum
    category = models.ForeignKey(Album, on_delete=models.CASCADE)
    author = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
    )

在我的视图中,我得到所有相册的列表,并检查用户拥有哪些相册:

albums = Album.objects.order_by('name')
my_albums = UserAlbum.objects.filter(user_id=request.user.id)

这一切都很好。但是,我现在需要显示在线相册列表,如果用户拥有相册,应该会显示一个小图标。我不知道怎么做。这就是我所拥有的:

<ul>
{% for info in albums %}
<li>{{ info.name %} {% if SOME_CONDITION %} <span class="owner"></span>{% endif %}</li>
{% endif %}

我不知道如何表述一些条件。它应该基本上说:如果这个专辑id也在我的专辑列表中。但我该怎么做呢?你知道吗


Tags: 用户nameid列表albumobjectsonmodels
1条回答
网友
1楼 · 发布于 2024-06-16 11:14:43

你不需要UserAlbum模型,除非你想给m2m关系附加额外的字段。相反,只需使用多个字段。你知道吗

from django.contrib.auth import get_user_model
User = get_user_model()

class Album(models.Model):
    name = models.CharField(max_length=255)
    users = models.ManyToManyField(User)

然后可以在模板的Album().users.all()中测试成员身份。你知道吗

{% for album in albums %}
<li>{{ album.name }}
  {% if request.user in album.users.all %}
    <span class="owner"></span>
  {% endif %}
</li>
{% endfor %}

如果您对UserAlbum模型有一些计划,you can use it as a intermediate model.

class Album(models.Model):
    name = models.CharField(max_length=255)
    users = models.ManyToManyField(User, through='UserAlbum')

相关问题 更多 >