django - 如何从模型中的外键关系中检索对象
问题描述
所以我试图从基于基本模型的* Bookmark模型中检索我的Post对象。但是,它似乎总是返回 null,我想知道如何检索我的 post oject?
这是我的书签模型:
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")
在我views.py
的查询中:
posts = BookmarkPost.objects.filter(user__id=request.user.id)
然而,它没有返回任何东西,尽管我确实有书签。我怎样才能做到这一点?
编辑
我已经使用上面的查询进行了测试posts.count()
,它返回3
的是我登录用户收藏的帖子数,但是在我的模板中我有:
{% for post in posts %}
{{ post.title }}
{% empty %}
is empty
{% endfor %}
is empty
现在甚至不会返回。
我的意见.py:
@login_required
def bookmarks(request):
posts = BookmarkPost.objects.filter(user__id=request.user.id)
context = {
'posts':posts,
}
return render(request,'main/bookmark/bookmarks_user.html', context)
我的个人资料模型:
class Profile(AbstractUser):
bio = models.TextField()
university = models.CharField(max_length=50)
image = models.ImageField(default='defaults/user/default_u_i.png', upload_to=upload_to_uuid('profile_image/profiles/'), blank=True)
def __str__(self):
return self.username
def get_absolute_url(self):
return "{}".format(self.slug)
提前致谢!
解决方案
所以我想出了如何访问使用BookmarkPost模型中的外键保存的每个Post对象的字段。
因此,为了将bookmark
对象放入我的视图中,我必须这样做:
user = request.user
bookmarked_posts = user.bookmarkpost_set.all()
这将给出bookmark
对象(不是帖子对象)。然后在我的模板中,我可以简单地执行以下操作:
{% for bookmark in bookmarked_posts %}
{{ bookmark.obj.title }}
{% endfor %}
这将为我提供我的用户收藏的所有帖子的标题。
推荐阅读
- python - Python OpenCV:从 ROS 返回 cvBridge 图像
- ios - SIGABRT 因为 FBSDK
- angular - 在 ionic 3 中以编程方式打开条形码扫描仪
- povray - 渲染非常小的物体时没有阴影
- java - 从 main 方法访问抽象类变量
- javascript - 如何存根返回类的类?
- java - 泛型类型实例化和 Lambda
- laravel - 通过第三台服务器对 api 进行 JWT 授权
- html - 带有 Bulma CSS 的 Angular 6 渲染没有 Bulma 样式的 HTML 元素
- google-chrome - 为什么 chrome.sync.set 只更新一次值