python - 如何在 django 的基于类的列表视图中添加点赞按钮
问题描述
我已经在详细视图中添加了点赞按钮,但无法使逻辑在列表视图中添加点赞按钮。我已经注释掉了我在下面的详细视图中使用的逻辑,该逻辑未能在列表视图中创建类似按钮。任何人都可以建议我做最好的方法,有人可以帮助我吗?
模型.py
models.py 中的代码
class AlbumVoteManager(models.Manager):
def get_vote_or_unsaved_blank_vote(self,album,user):
try:
return Vote.objects.get(album=album,user=user)
except ObjectDoesNotExist:
return Vote(album=album,user=user)
class AlbumVote(models.Model):
UP = 1
DOWN = -1
VALUE_CHOICE = ((UP, "️"),(DOWN, "️"),)
like = models.SmallIntegerField(null=True, blank=True, choices=VALUE_CHOICE)
user = models.ForeignKey(User,on_delete=models.CASCADE)
album = models.ForeignKey(Album, on_delete=models.CASCADE)
voted_on = models.DateTimeField(auto_now=True)
created_on = models.DateTimeField(auto_now_add=True)
objects = AlbumVoteManager()
class Meta:
unique_together = ('user', 'album')
表格.py
form.py 中的代码
class AlbumVoteForm(forms.ModelForm):
class Meta:
model = AlbumVote
fields = ['like']
视图.py
views.py 中的代码
class AlbumListView(ListView):
model = Album
paginate_by = 5
# def get_context_data(self,**kwargs):
# ctx = super().get_context_data(**kwargs)
# if self.request.user.is_authenticated:
# vote =
AlbumVote.objects.get_vote_or_unsaved_blank_vote(album=self.object_list.object, user = self.request.user)
# if vote.id:
# vote_url = reverse('music:album_vote_update', kwargs={'album_id':vote.album.id,'pk':vote.id})
# else:
# vote_url = reverse('music:album_vote_create', kwargs={'album_id':self.object_list.object.id})
# vote_form = AlbumVoteForm(instance=vote)
# ctx['vote_form'] = vote_form
# ctx['vote_url'] = vote_url
# return ctx
专辑列表.html
专辑列表视图中的代码。
<div class="container">
{% if object_list %}
{% for album in object_list %}
<div class="card my-3">
<div class="card-header">
Featured
</div>
<div class="card-body">
<h5 class="card-title">
<a href="{% url 'music:detail_view' pk=album.id %}"><strong>{{album.title}}</strong></a>
</h5>
<p class="card-text">{{album.discription}}.</p>
<a href="#" class="btn btn-primary">Go somewhere</a>
</div>
</div>
解决方案
这可以通过将唯一的 id 传递给按钮来实现,而模板上的所有类都相同。您可以在此处参考 Medium 上的这篇文章,该文章使用 AJAX 实现了类似的功能
推荐阅读
- sql-server - 有没有办法从 Entity Framework Core 的层次结构表中获取 First() ?
- prolog - 有没有办法在 Prolog 中扩展爱因斯坦的谜语?
- javascript - JS 如何在 Firefox 中分别检查对网络摄像头和麦克风的访问权限
- django - 访问 ModelForm 中的其他字段
- java - 对象的Arraylist找到所有不同的属性对象
- python - 在数字列表中计算相同数字的重复次数
- python - Python - 为什么这是一个无限循环?
- android - Kotlin - 无法访问
在 AndroidManifest 文件中进行权限请求 - javascript - 为什么与 Chrome 相比,我在 React 应用程序中的 API 在 Firefox 中的获取速度较慢?
- javascript - 如何使用 Ajax 和 Laravel 显示用户配置文件