【问题标题】:get_object_or_404 with relationshipget_object_or_404 与关系
【发布时间】:2014-04-17 00:43:04
【问题描述】:

我想从post 来看这一定是可能的,但我似乎无法弄清楚语法。我需要通过作者外键获取带有图片字段的博客对象。

get_object_or_404 是否可以实现,如果可以,如何实现?

#models.py
class Blog(models.Model):
    author = models.ForeignKey(MyUser)

#author
class MyUser(AbstractUser):
    picture = models.ImageField()

blog = get_object_or_404(Blog, pk=blog_id)

【问题讨论】:

  • 不清楚你在问什么。听起来你的意思是get_object_or_404(Blog, author__picture='somefilename.jpg'),但这没有多大意义。
  • 您的博客对象将有权访问作者和个人资料。 blog.author.picture 应该会产生您的结果,尽管它会引起查询。
  • 好吧,我明白了。所以在 1 个查询中,我只想通过 id 获取博客,以及作者图片。我猜这对于 get_object_or_404 是不可能的?
  • 这似乎是可能的。 stackoverflow.com/questions/6624530/…
  • 那是 2 次数据库命中,不是吗?

标签: django django-queryset


【解决方案1】:

你想要的查询是这样的(来自docs):

from django.db import models

class City(models.Model):
    # ...
    pass

class Person(models.Model):
    # ...
    hometown = models.ForeignKey(City)

class Book(models.Model):
    # ...
    author = models.ForeignKey(Person)

然后你的查询是:

b = Book.objects.select_related('author__hometown').get(id=4)
p = b.author         # Doesn't hit the database.
c = p.hometown       # Doesn't hit the database.

b = Book.objects.get(id=4) # No select_related() in this example.
p = b.author         # Hits the database.
c = p.hometown       # Hits the database.

除了你的情况,你的查询是:Picture.objects.select_related('author__blog').get(picture_name='somefilename.jpg')

您是说我想要与图片名称“somefilename.jpg”相关的图片(以及在您使用时,作者和他们的博客)。至少如果我理解你的问题和数据库结构的话。

【讨论】:

  • 嗯,这肯定是很久以前的事了,虽然我很欣赏它没有得到很好的解释,但似乎@victor-chris-cabral 有正确的回应,这里是-stackoverflow.com/questions/6624530/…跨度>
  • @rix 绝对是,但答案总是比评论更好(cmets 更容易消失)。对于其他来到这里的人来说,这也应该构成一个具体的例子。
【解决方案2】:

正如 Pureferret 在his answer 中所建议的那样 你可以通过以下方式做到这一点,

blog = Blog.objects.get(pk=blog_id)
author = blog.author

如果您想在模板中显示该图像,只需使用

{{ auther.picture.url }}

【讨论】:

    猜你喜欢
    • 2017-01-08
    • 1970-01-01
    • 2016-10-15
    • 2012-10-07
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    相关资源
    最近更新 更多