python - Django:在模板中访问多对多(反向)

标签 python django many-to-many thumbnails reverse

跟进有关reversed many-to-many look ups的帖子,我想知道我的项目/图片问题的最佳实践是什么:

我想注册多个项目,用户可以上传(但不是必需)多个项目图片。

因此我定义了以下两个类:

from easy_thumbnails.fields import ThumbnailerImageField

class Project(models.Model):
    name = models.CharField(_('Title'), max_length=100,)
    user = models.ForeignKey(User, verbose_name=_('user'),)
    ...

class ProjectPicture(models.Model):
    project = models.ForeignKey('Project')
    picture = ThumbnailerImageField(_('Image'),
            upload_to='user/project_pictures/', null=True, blank=True,)

    def __unicode__(self):
        return u'%s\'s pictures' % (self.project.name)

因此,对于每个用户,我通过

在“仪表板”中显示他们的项目
projects = Project.objects.filter(user = logged_user)

它返回包含名称等的项目列表

现在我想在仪表板表中显示项目的图片。因此我有两个问题正在寻求建议:

1) 类(class)设置实际上是最好的方法吗?我将类分开,如上所示,以允许用户为每个项目上传多张图片。有更好的方法吗?

2) 如果有图片,如何在模板中显示项目的第一张图片?我是否需要对与项目对应的每个 ProjectPicture 对象进行查询?或者有一个优雅的 Django 解决方案可以解决这个问题吗?

最佳答案

这不是多对多关系,您使用外键。这是正常设置。要访问模板中的第一张图片,您可以使用 {{ project.projectpicture_set.all.0 }},它将生成额外的查询。为了避免它使用 prefetch_related .

关于python - Django:在模板中访问多对多(反向),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14373193/

相关文章:

python - 如何在 Python/Django 中获取图片标题

django - 代码 : unknown, 错误:从 "api.twitter.com"获取请求 token 时响应无效 - 如何获取和打印 Twitter 错误消息

python - 仅使用 Django 的 DB 部分

sql - Django:在可以使用这种多对多关系之前,对象需要具有字段 "..."的值

python - 如何编写脚本在多核机器上有效运行多进程

python - IPython 笔记本 : Count number of cells in notebook

python - 如何根据标题名称移动 csv 中的数据并将其移动到同一列?

perl - 使用 DBIx::Class 的多对多访问器

c# - Entity Framework 6.2 将多对多从一个 DbContext 复制到另一个 DbContext

python - 获取xml中不同标签之间的字符串