我正在研究多用户rss阅读器。我想限制帖子的显示只限于未读的帖子。我已经设法在我的单个“feed”视图中做到这一点,但我无法弄清楚如何在多个feed中也做同样的“category”视图。视图和模板中的Django模型关系
我一直在试图像这里https://docs.djangoproject.com/en/1.5/topics/db/queries/#spanning-multi-valued-relationships但对我来说
我应该改变我的“类别”视图或代码模板代码没有奏效?如果是的话,你会怎么做呢?
谢谢! -S
车型
class UserCategory(models.Model):
name = models.CharField(unique=False, max_length=64)
user = models.ForeignKey(User)
slug = AutoSlugField(populate_from='name', always_update='True', unique_with='user')
class Feed(models.Model):
feed_url = models.URLField(unique=True)
default_title = models.CharField(max_length=64, blank=True)
link = models.URLField(blank=True)
class UserFeed(models.Model):
feed = models.ForeignKey(Feed)
title = models.CharField(max_length=64)
category = models.ForeignKey(UserCategory)
user = models.ForeignKey(User)
slug = AutoSlugField(populate_from='title', always_update='True', unique_with='user')
class Post(models.Model):
feed = models.ForeignKey(Feed)
title = models.CharField(max_length=256)
content = models.TextField()
link = models.URLField(max_length=512)
class ReadPost(models.Model):
user = models.ForeignKey(User)
post = models.ForeignKey(Post)
意见
def feed(request, user_feed_slug):
user_feed = get_object_or_404(UserFeed.objects.filter(slug=user_feed_slug, user=request.user))
read_post = ReadPost.objects.filter(user=request.user).values_list('post')
posts = Post.objects.select_related().filter(feed=user_feed.feed).exclude(id__in=read_post)
def category(request, user_category_slug):
user_category = get_object_or_404(UserCategory.objects.filter(slug=user_category_slug, user=request.user))
模板
feed
{% for post in posts %}
{{ post.title }}
{% endfor %}
category
{% for feed in user_category.userfeed_set.all %}
{{ feed.title }}
{% for post in feed.feed.post_set.all %}
{{ post.title }}
{{ post.content }}
{% endfor %}
{% endfor %}
我不熟悉自定义过滤器。我不确定如何正确地实现它?我应该把它放在这里:{%for feed in user_category.userfeed_set.all | unread%}或这里{%for feed in feed.feed.post_set.all | unread%} ??还应该加上一些额外的参数,如未读:帖子?我正在尝试所有这些选项,但它似乎没有工作:( – sikor
您必须将此过滤器应用于发布queryset并另外传递用户阅读帖子。因此,在此示例中,它可能是这样的:'{%for post在feed.feed.post_set.all | unread:read_posts%}'。 –
经过进一步调整就像一个魅力!Dzieki :) – sikor