首页 > 解决方案 > 检查用户是否存在于数据库表中

问题描述

我想编写一个方法来检查用户是否已将对象添加到他们的书签中,但是,我正在努力编写它以便我可以将它传递到我的模板中。

所以我有两种类型的模型来为不同的对象添加书签:

class BookmarkBase(models.Model):
    class Meta:
        abstract = True
        
    user = models.ForeignKey(Profile,on_delete=models.CASCADE, verbose_name="User")

    def __str__(self):
        return self.user.username

class BookmarkPost(BookmarkBase):
    class Meta:
        db_table  = "bookmark_post"
    
    date = models.DateTimeField(auto_now_add=True)
    obj = models.ForeignKey('home.Post',on_delete=models.CASCADE, verbose_name="Post")

class BookmarkBlog(BookmarkBase):
    class Meta:
        db_table  = "bookmark_blog"
        
    date = models.DateTimeField(auto_now_add=True)
    obj = models.ForeignKey('home.Blog',on_delete=models.CASCADE, verbose_name="Blog")

我负责处理向书签添加/删除对象的视图URL是:

@login_required
def add_bookmark(request, id, obj_type):
    data=dict()
    if request.method == 'POST':
        if obj_type=='post':
            model = BookmarkPost
        elif obj_type=='blog':
            model = BookmarkBlog
        elif obj_type=='buzz':
            model = BookmarkBuzz
        user = auth.get_user(request)
        bookmark, created = model.objects.get_or_create(user=user, obj_id=id).remove()
        if not created:
            bookmark.delete()
        context = {'bookmark':bookmark}
        data['html_form'] = render_to_string('main/bookmark/bookmark.html',context,request=request)
    return JsonResponse(data)

网址是:

path('bookmark/<int:id>/<str:obj_type>/', views.add_bookmark,name='add-bookmark'),

我正在努力解决如何添加此功能的问题,以便如果用户已经添加了书签,它将更改它的图标并显示该{% else %}部分:

<form class="add-bookmark-form" method="POST">
    {% if request.user has not added object to bookmark %}
    <button class="small dropdown-item" type="submit" data-url="{% url 'main:add-bookmark' id=get_id obj_type=t %}" ><svg class="bi  mr-1 bi-bookmark" width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
        <path fill-rule="evenodd" d="M8 12l5 3V3a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v12l5-3zm-4 1.234l4-2.4 4 2.4V3a1 1 0 0 0-1-1H5a1 1 0 0 0-1 1v10.234z"/>
      </svg></i>Bookmark</button>
    {% else %}
    <button class="small dropdown-item" type="submit" data-url="{% url 'main:add-bookmark' hid=get_hash obj_type=t %}" ><svg class="bi mr-1 bi-bookmark-fill" width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
        <path fill-rule="evenodd" d="M3 3a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v12l-5-3-5 3V3z"/>
      </svg></i>Bookmarked</button>
    {% endif %}
</form>

提前致谢!

标签: djangodjango-modelsdjango-formsdjango-viewsdjango-templates

解决方案


我认为您可以通过创建另一条路线来做到这一点,当有人为某物添加书签并在那里添加“其他”功能时将调用该路线。


推荐阅读