django - 检查用户是否存在于数据库表中
问题描述
我想编写一个方法来检查用户是否已将对象添加到他们的书签中,但是,我正在努力编写它以便我可以将它传递到我的模板中。
所以我有两种类型的模型来为不同的对象添加书签:
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>
提前致谢!
解决方案
我认为您可以通过创建另一条路线来做到这一点,当有人为某物添加书签并在那里添加“其他”功能时将调用该路线。
推荐阅读
- python - 熊猫根据另一个数据框的 2 列添加新列
- python-3.x - 尝试检查电子邮件有效性时出现 WinError 10060
- bash - gnuplot awk/bash 转义引用
- sql - Crystal Reports Order By 逻辑切换到 asc 然后 desc
- r - 使用按组应用函数将列更改为数据框
- php - 已安装 PHP 和 MySQL 驱动程序,但未显示在 Ubuntu 上的 phpinfo() 中
- python - 如何绘制熊猫数据框的特定列?
- html - Firefox 开发人员忽略字体粗细
- php - windows上的apache 2.4在表单提交按钮上没有给出权限错误点击
- c# - 无法使用 C# 打开 Excel 文件