首页 > 解决方案 > 如何从模型中的外键关系中检索对象

问题描述

所以我试图从基于基本模型的* 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)

提前致谢!

标签: djangodjango-modelsdjango-views

解决方案


所以我想出了如何访问使用BookmarkPost模型中的外键保存的每个Post对象的字段。

因此,为了将bookmark对象放入我的视图中,我必须这样做:

user = request.user
bookmarked_posts = user.bookmarkpost_set.all()

这将给出bookmark对象(不是帖子对象)。然后在我的模板中,我可以简单地执行以下操作:

{% for bookmark in bookmarked_posts %}

   {{ bookmark.obj.title }}

{% endfor %}

这将为我提供我的用户收藏的所有帖子的标题。


推荐阅读