[英]Django: Filter ListView on currently logged-in user (manytomanyfield)
[英]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.