【问题标题】:Django views.py: Add to favorites pageDjango views.py:添加到收藏夹页面
【发布时间】:2019-08-19 06:00:42
【问题描述】:

我正在尝试编辑一个 html 页面,以便登录的用户可以收藏video.id

这是 .html 文件

<td>
    <form method='POST' action="{% url 'foobar:favourite_post' video.id %}">
        {% csrf_token %}
        <input type='hidden' name='video' value={{ video.id }}>
        <button type='submit'>Bookmark</button>
    </form>
</td>

这是 urls.py 文件

app_name = 'foobar'

urlpatterns = [
    path('', views.f_ListView.as_view(), name='overview'),
    path('<int:pk>/', views.f_DetailView.as_view(), name='detailview'),
    path('<int:fav_id>/favourite_post/', views.favourite_post, name='favourite_post'),
]

这是 view.py 文件

def favourite_post(request, fav_id):
    video = get_object_or_404(Video, id=fav_id)
    if request.method == 'POST': #Then add this video to users' favourite
        video.

   return render(request, 'foobar/%s' % fav_id)

如何编辑 views.py 文件,以便将其注册到用户收藏该视频的数据库中?

这是 models.py 文件

from django.contrib.auth.models import AbstractUser

class ProjectUser(AbstractUser):

    def __str__(self):
        return self.email

class Video(models.Model):
    name = models.CharField(max_length=255),
    videofile = models.FileField(upload_to="static/videos/"),
    favourite = models.ManyToManyField(ProjectUser, related_name="fav_videos", blank=True)

【问题讨论】:

  • 嗨,欢迎来到 SO,请查看有关同一主题的答案:stackoverflow.com/questions/1182380/…
  • ProjectUser 是 auth 用户模型吗?如果不是,它们有什么关系?
  • @DanielRoseman 是的,丹尼尔你是对的,我更新了问题以包含该问题

标签: python django


【解决方案1】:

可能不是那么明显,需要先获取当前登录用户

request.user

如果您的查看功能不需要用户登录,那么您需要检查

if request.user is not None

然后将其添加到视频的收藏夹列表中

video.favorite.add(request.user)

在官方文档中阅读更多内容。 many to many

【讨论】:

    【解决方案2】:
    def favourite_post(request, fav_id):
    video = get_object_or_404(Video, id=fav_id)
        if request.method == 'POST':
            video.favourite.add(request.user)
            # Rest code
        return render(request, 'foobar/%s' % fav_id)
    

    【讨论】:

    • request.user.fav_videos.add(video),完全等价,但可能更清楚地表达意图。
    • 这似乎与这个答案没有任何关系。您应该提出一个显示完整错误回溯的新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多