簡體   English   中英

在 Django 模板中顯示當前登錄用戶喜歡的所有用戶配置文件(在 ManytoMany 字段下)

[英]Display all User profiles, in Django template, liked by the currently logged-in User (under ManytoMany field)

我建立了一個門戶,成員可以在其中查看其他用戶的個人資料並喜歡他們。 我想顯示一個頁面,當前登錄的用戶只能看到他們喜歡的成員的個人資料列表。

模型有一個“喜歡”的文件,其中存儲了每個成員個人資料的喜歡:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.jpg', upload_to='profile_pics')
    company = models.CharField(max_length=500, blank = True)
    city = models.CharField(max_length=100, blank = True)
    website = models.URLField(max_length=500, blank = True)
    liked = models.ManyToManyField(User, related_name='user_liked', blank=True)

我的views.py ,在這里我只顯示所有成員,所以在我的模板上我可以遍歷成員中的每個成員...包括來自 Profile 模型的“member.profile”詳細信息。

@login_required
def all_fav_members(request):
    users = User.objects.all
    context = {'members':users}
    return render(request, 'club/all_fav_members.html', context)

我在views.py和我的HTML模板下嘗試了很多東西,但是我無法遍歷與“喜歡”字段下的特定配置文件相關聯的所有用戶,該用戶等於request.user。

我是 Django 的新手,因此嘗試了多種方法。 結果通常是我得到了整個成員列表,而不是當前用戶喜歡的成員。 不工作的例子之一:

{% if member.profile.liked.filter(id=request.user.id).exists()%}

我的模板

 {% for member in members %} 
     <table class="table w-100 table-hover">
        <thead>
           <tr id="header-paragraph-table-top">
               <th>Name & Surname</th>
               <th>Email</th>
               <th>Company</th>
           </tr>
        </thead>
        <tbody>
           <tr id="paragraph-table">
               <td>{{ member.first_name|capfirst }} {{ member.last_name|capfirst }}</td>
               <td><a href="mailto:{{ member.email }}">{{ member.email }}</a></td>
               <td>{{ member.profile.company }}</td>
           </tr>
        </tbody>
     </table>

網址.py

path('all_fav_members/', views.all_fav_members, name='all_fav_members'),

我可能會使用模板標簽來解決這個問題。 閱讀此頁面以了解如何注冊模板標簽: https ://docs.djangoproject.com/en/4.0/howto/custom-template-tags/

在 your_template_tags 中:

from django import template

register = template.Library()

@register.filter
def liked_user(user, other_user):
    return user.profile.liked.filter(id=other_user.id).exists()

在您的模板中,您可以執行以下操作:

{% load your_template_tags %}
{% if member|liked_user:request.user %}

雖然我可能會像這樣在views.py中處理它:

for member in context["members"]:
    member.liked_by_user = member.profile.liked.filter(id=request.user.profile.id).exists()

然后你可以在你的模板中使用這個屬性,比如:

{% if member.liked_by_user %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM