Django从外键获取数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django从外键获取数据相关的知识,希望对你有一定的参考价值。
[我是在新闻网站上工作的新手(或者至少是最近几天尝试过很多“问题”),试图尽我所能学习Django。
这是我想做的:
我有一个Article Model,它曾经有6个图像字段,我曾将它们发送到模板并渲染图像,每个图像字段都有其自己的名称,并且在世界范围内都很好。然后,我承担了将Article图片放在单独的Image模型中的任务。所以我做到了:
class Article(models.Model):
title = models.CharField('title', max_length=200, blank=True)
slug = AutoSlugField(populate_from='title', default="",
always_update=True, unique=True)
author = models.CharField('Author', max_length=200, default="")
description = models.TextField('Description', default="")
is_published = models.BooleanField(default=False)
article_text = models.TextField('Article text', default="")
pub_date = models.DateTimeField(default=datetime.now, blank=True)
article_category = models.ForeignKey(Category, on_delete="models.CASCADE", default="")
def __str__(self):
return self.title
class ArticleImages(models.Model):
article = models.ForeignKey(Article, on_delete="models.CASCADE", related_name="image")
image = models.ImageField("image")
name = models.CharField(max_length=50, blank=True)
但是到目前为止,我无法使用以下方式访问模板中的图像:>
article.image.url or article.image.image.url
或任何其他组合。这是为什么 ?我是否正确设置了模型?有人建议我将模型字段从ForeignKey更改为OneToOneField,但对于为什么以及如何我没有得到太多反馈?
所以,我如何制作一个遍历Articles模型的for循环,然后获取每个Article的相关图像?我本质上希望它的行为像我以前一样拥有6个不同的字段。 (我必须这样做,这是任务的一部分)。
这是我的观点和我用来遍历文章并在主页上显示6条最新新闻的“索引”模板。 (请忽略标签,我知道它们不能像这样工作。模板只是为了让您了解我在说什么)]
我的views.py:
class IndexView(generic.ListView): template_name = 'news/index.html' context_object_name = 'latest_article_list' def get_queryset(self): return Article.objects.all() class CategoryView(generic.ListView): template_name = 'news/categories.html' context_object_name = 'category' def get_queryset(self): return Article.objects.filter(article_category__category_title="Politics") class ArticlesView(generic.ListView): context_object_name = 'latest_article_list' template_name = 'news/articles.html' paginate_by = 5 def get_context_data(self, **kwargs): context = super(ArticlesView, self).get_context_data(**kwargs) context['categories'] = Category.objects.all() return context def get_queryset(self): category_pk = self.request.GET.get('pk', None) if category_pk: return Article.objects.filter(article_category__pk=category_pk).order_by("-pub_date") return Article.objects.order_by("-pub_date") def article(request, article_id): article = get_object_or_404(Article, pk=article_id) context = 'article': article, 'article_category': article.article_category.category_title return render(request, 'news/article.html', context)
我与旧模型一起使用的模板:
% for article in latest_article_list % <img class="single-article-img" src=" article.image.name.url " alt=""> <div class="container row"> <!-- Start Left Blog --> <div class="article mt-10 col-md-4 col-sm-4 col-xs-12"> <div class="single-blog" style="margin:10px auto;"> <div class="single-blog-img"> <a href="% url 'news:article' article.id %#article-title"> <img class="for-imgs" src=" article.image.url " alt=""> </a> </div> <div class="blog-meta"> <span class="date-type"> <i class="fa fa-calendar"></i> article.pub_date </span> </div> <div class="xx blog-text"> <h4> <a href="% url 'news:article' article.id %#article-title"> article.title </a> </h4> <p> article.description|truncatewords:30 </p> </div> <span> <a href="% url 'news:article' article.id %" class="ready-btn">Read more</a> </span> </div> </div> % endfor %
谢谢!
我是新闻网站上的新手(或者至少最近几天尝试过很多“问题”,哈哈),试图尽我所能学习Django。这就是我想做的:我有一个文章模型,...
答案
[您需要遍历图像,因为针对单个文章对象有许多图像。您可以像下面这样在模板中显示图像:
以上是关于Django从外键获取数据的主要内容,如果未能解决你的问题,请参考以下文章
django - 模型 unicode() 显示外键对象属性