【问题标题】:How get objects from through model?如何通过模型获取对象?
【发布时间】:2014-01-13 11:21:44
【问题描述】:

我有这样的模型:

class PortfolioAlbum(models.Model):
    title = models.CharField()

class Portfolio(models.Model):
    title = models.CharField() 
    photo = models.ManyToManyField(PortfolioAlbum, through='AlbumPhotos')


class AlbumPhotos(models.Model):
    album = models.ForeignKey(PortfolioAlbum)
    portfolio = models.ForeignKey(Portfolio)
    title = models.CharField()
    photo = ThumbnailerImageField()

如何在“作品集”页面的上下文中获取我的 AlbumPhotos(字段 - '照片')?

我上次尝试过:

<ul>
{% for albumphotos in portfolios %}
<li><img src="{{ albumphotos.photo.image150x150.url }}"></li>
{% endfor %}
</ul>

..还有一些例子,但这是错误的。

【问题讨论】:

  • portfoliosPortfolio 对象的列表吗?如果是这样,那么 HTML 部分就没有多大意义了..

标签: django django-models django-queryset django-orm


【解决方案1】:

Photo 本身应该是一个完全成熟的模型,并且与 Album 具有外键或 m2m 关系。

无论如何,要查看模型的记录,请执行以下操作:

portfolio = Portfolio.objects.get(…)
photos = portfolio.photo.through.filter(portfolio=portfolio)

这真是奇怪的关系……

相反,你应该能够写:

portfolio = Portfolio.objects.get(…)
for album in portfolio:
    for photo in album:
        print photo

【讨论】:

    【解决方案2】:

    来自https://docs.djangoproject.com/en/1.7/topics/db/queries/#backwards-related-objects

    用途:

    protifolio.albumphoto_set.all()
    

    将所有 AlbumPhoto 附加到一个 protfolio 实例。当使用多对一关系时,Django 将通过 foo_set 自动设置反向关系。

    很晚了,但我还是把它贴出来了,为了记录

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 2023-04-05
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多