像匹配查询不存在 - Django

时间:2015-04-30 01:56:49

标签: python django django-models django-views django-queryset

我创建了一个类似按钮,可以在用户喜欢照片时将其添加到查询中,如果他们与照片不同,则会将其删除。

后端效果很好!前端,不是那么多。

尝试加载页面时出现以下错误:Like matching query does not exist.

问题出在这行代码中:like = Like.objects.get(pk=obj.id)

有人可以帮助我使用正确的代码在我的html文件中显示{% if request.user.username in like.get_likers %}{{ like.likers.count }}吗?

非常感谢!

HTML:

{% if request.user.username in like.get_likers %}
    <input id="like_btn" name="{{ obj.slug }}" value="Liked" type="button" />
{% else %}
    <input id="like_btn" name="{{ obj.slug }}" value="Like" type="button" />
{% endif %}
<h3>
    <a href="{% url 'like_thread' %}"><strong id="like_count">{{ like.likers.count }}</strong></a>
</h3>

VIEWS.PY:

def photo_detail(request, photo_slug, username):
    u = MyUser.objects.get(username=username)
    obj = get_object_or_404(Photo, slug=photo_slug)
    like = Like.objects.get(pk=obj.id)

    context = {
        "like": like,
        "obj": obj
    }
    return render(request, "photos/photo_detail.html", context)

MODELS.PY:

class Photo(models.Model):
    creator = models.ForeignKey(MyUser, null=False)
    image = models.ImageField(upload_to='user/photos/', null=True, blank=True)
    slug = models.SlugField(null=False, blank=False)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)

class Like(models.Model):
    image = models.ForeignKey(Photo)
    likers = models.ManyToManyField(MyUser, related_name='Likers', null=True, blank=True)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)

    def __unicode__(self):
        return "CREATOR: %s | SLUG: %s" %(self.image.creator, self.image.slug)

    def get_likers(self):
        return ", ".join([a.username for a in self.likers.all()])

1 个答案:

答案 0 :(得分:0)

您需要检查是否有喜欢。在视图和模板中都有。由于like变量可能包含内容,因此您可以先在视图中查看。如果存在,请将其添加到字典中。

def photo_detail(request, photo_slug, username):
    u = MyUser.objects.get(username=username)
    obj = get_object_or_404(Photo, slug=photo_slug)

    context = {
        "obj": obj
    }
    # find out if there are any likes, if there are, add 
    # to the context dictionary
    try: 
        like = Like.objects.get(pk=obj.id)
        context['like'] = like
    except Like.DoesNotExist:
        pass

    return render(request, "photos/photo_detail.html", context)

然后在你的模板中,你还需要做一个if:

 {% if like %}
      <input id="like_btn" name="{{ obj.slug }}" value="{% if request.user.username in like.get_likers %}Liked{% else %}Like{% endif %}" type="button" />}
 {% endif %}

尽管如此,您可以轻松检查用户是否喜欢该视图中的照片。