Django models Django-如何查询和显示多个关系结构
我正在构建一个RSS提要阅读器,用户可以在其中添加自己的提要和类别。我想将所有提要的内容存储在db中,并运行一个脚本,定期为db中存在的所有提要url获取该内容(我有一个工作项目,其中每个提要都是实时获取的,这不是一个好主意) 现在,经过几次尝试,我进入了以下模型结构Django models Django-如何查询和显示多个关系结构,django-models,django-templates,django-views,Django Models,Django Templates,Django Views,我正在构建一个RSS提要阅读器,用户可以在其中添加自己的提要和类别。我想将所有提要的内容存储在db中,并运行一个脚本,定期为db中存在的所有提要url获取该内容(我有一个工作项目,其中每个提要都是实时获取的,这不是一个好主意) 现在,经过几次尝试,我进入了以下模型结构 class Category(models.Model): name = models.CharField(unique=False, max_length=64) user = models.ForeignKey
class Category(models.Model):
name = models.CharField(unique=False, max_length=64)
user = models.ForeignKey(User)
def __unicode__(self):
return self.name
class Meta:
ordering = ('name',)
class Feed(models.Model):
feed_url = models.URLField(unique=True)
def __unicode__(self):
return self.feed_url
class UserFeed(models.Model):
feed = models.ForeignKey(Feed)
title = models.CharField(max_length=256)
category = models.ForeignKey(Category)
user = models.ForeignKey(User)
def __unicode__(self):
return self.title
class Post(models.Model):
feed = models.ForeignKey(Feed, related_name='feed_posts')
## starting from here, my cronjob / script populates the data (using feedparser lib)
title = models.CharField(max_length=256)
content = models.TextField()
link = models.URLField(max_length=512)
dt_published = models.DateTimeField()
dt_cached = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return '%s (%s)' % (self.feed, self.title)
class Meta:
ordering = ('-dt_published',)
我现在要寻找的是将以下实体拉入视图和模板的能力:
->类别->提要->帖子
在我以前的版本中,Feed和UserFeed字段存储在一个表/模型中,我有这样的视图:
def category(request, category_id):
user = request.user
page_title = "Category: "
category = get_object_or_404(Category.objects.filter(id=category_id, user=user)).feed_set.all()
category_name = Category.objects.get(id=category_id)
context = {
'page_title': page_title,
'category': category,
'category_name': category_name,
}
return expand_context_and_render(request, context, 'reader/category.html')
这是我的模板:
{% for feed in category %}
<p><a href="/reader/feed/{{ feed.id }} ">{{ feed.title }}</a></p>
{% for post in feed.post_set.all|slice:"6" %}
<p><a href="{{ post.link }}">{{ post.title }}</a></p>
<p>{{ post.content }}</p>
<p>{{ post.dt_published|timesince }} ago.</p>
{% endfor %}
{% endfor %}
{% for user_feed in user_feeds %}
<p><strong><a href="/reader/feed/{{ feed.id }} ">{{ user_feed }}</a></strong></p>
{% for post in user_feed.feed.post_set.all|slice:"6" %}
<div class="col-md-4">
<p><a href="{{ post.link }}">{{ post.title|truncatechars:"45" }}</a></p>
<p>{{ post.content|striptags|safe|truncatechars:"85" }}</p>
<p class="feed_date">{{ post.dt_published|timesince }} ago.</p>
<hr />
</div>
{% endfor %}
{% endfor %}
{%用于类别%中的提要]
{feed.post_set.all | slice:“6”%}
{{post.content}}
{{post.dtu在| timesince}年前出版
{%endfor%}
{%endfor%}
它按预期工作
现在,由于我不想在我的数据库中有多个feed_url副本,我认为新模型是可以的,但我就是不知道如何查询和显示这个具有上游和下游关系的新结构。我正在看与select_相关的,但没有成功。你能帮忙吗 我最终自己找到了解决办法。这有点老套,但能起作用
def category(request, user_category_id):
user = request.user
page_title = "Category: "
user_category = get_object_or_404(Category.objects.filter(id=user_category_id, user=user))
user_feeds = UserFeed.objects.filter(category=user_category, user=user)
context = {
'page_title': page_title,
'user_category': user_category,
'user_feeds': user_feeds,
}
return expand_context_and_render(request, context, 'reader/category.html')
和模板:
{% for feed in category %}
<p><a href="/reader/feed/{{ feed.id }} ">{{ feed.title }}</a></p>
{% for post in feed.post_set.all|slice:"6" %}
<p><a href="{{ post.link }}">{{ post.title }}</a></p>
<p>{{ post.content }}</p>
<p>{{ post.dt_published|timesince }} ago.</p>
{% endfor %}
{% endfor %}
{% for user_feed in user_feeds %}
<p><strong><a href="/reader/feed/{{ feed.id }} ">{{ user_feed }}</a></strong></p>
{% for post in user_feed.feed.post_set.all|slice:"6" %}
<div class="col-md-4">
<p><a href="{{ post.link }}">{{ post.title|truncatechars:"45" }}</a></p>
<p>{{ post.content|striptags|safe|truncatechars:"85" }}</p>
<p class="feed_date">{{ post.dt_published|timesince }} ago.</p>
<hr />
</div>
{% endfor %}
{% endfor %}
{%for user_feed in user_feed%}
{user_feed.feed.post_set.all | slice:“6”}
{{post.content | striptags | safe | truncatechars:“85”}
{post.dt_发布时间| timesince}}
{%endfor%}
{%endfor%}