1

跟进有关反向多对多查找的帖子,我想知道我的项目/图片问题的最佳实践是什么:

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

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

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)课程设置实际上是最好的方法吗?我拆分了如上所示的类,以允许用户在每个项目中上传多张图片。会有更好的方法吗?

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

4

1 回答 1

3

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

于 2013-01-17T07:11:39.103 回答