0

我在用Django 2.0

我有三张桌子notesstarred并且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
4

0 回答 0