我正在使用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