如何从模型中的外键关系中检索对象

时间:2020-06-24 17:34:43

标签: django django-models django-views

所以我试图从基于基本模型的* 书签模型中检索我的 Post 对象。但是,似乎总是返回null,我想知道如何检索我的帖子对象?

这是我的书签模型:

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

我的views.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)

谢谢!

1 个答案:

答案 0 :(得分:0)

因此,我弄清楚了如何访问使用 BookmarkPost 模型中的外键保存的每个 Post 对象的字段。

要使bookmark对象进入我的视图,我必须这样做:

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

将提供bookmark对象(而不是post对象)。然后在我的模板中,我可以简单地做:

{% for bookmark in bookmarked_posts %}

   {{ bookmark.obj.title }}

{% endfor %}

谁会给我我用户添加了书签的所有帖子的标题。