我在用Django 2.0
我有三张桌子notes
,starred
并且shared
笔记模型
def Notes(models.Model):
title = models.CharField()
def Starred(models.Model):
note = models.ForeignKey(Note, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def Shared(models.Model):
note = models.ForeignKey(Note, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
该笔记可以与多个用户共享,并且多个用户可以为该笔记加注星标,该笔记将在他们的/starred
笔记中列出
views.py 有
class SharedNotes(ListView):
template_name = 'notes/shared.html'
model = Shared
context_object_name = 'shared_notes'
def get_queryset(self):
shared_notes = Shared.objects.filter(user=self.request.user)
return shared_notes
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super(self.__class__, self).dispatch(request, *args, **kwargs)
我已经编写了一个单独的模板片段来显示笔记列表并添加*
(星号),如果它由登录用户使用
{% if note.starred_set.all %}
<span class="card-star">
<i class="material-icons">star</i>
</span>
{% endif %}
但这种方式星号显示与其他用户共享笔记,即使他们没有为笔记加星标但已被其他人加注星标。
如何仅过滤已加星标的登录用户?
我想写一个标签来使用
{% if note.pk|starred %}
<!-- add html star code here -->
{% endif %}
并过滤标签templatetags/my_tag.py
@register.filter(name='starred')
def starred(value):
note = Note.objects.get(pk=value)
if note is not None:
starred_note = Starred.objects.filter(note=note, user=value['request'].user)
if starred_note is not None:
return True
return True
但这给出了错误
'int' object is not subscriptable