21

我知道你会说这个问题以前被问过很多次,但我还没有解决它......

模型.py

class Doc(UploadModel):
    doc_no =  models.CharField(max_length=100, verbose_name = "No", blank=True)
    date_added = models.DateTimeField(verbose_name="Date", default=datetime.now,
                 editable=False)

class DocImage(models.Model):
    property = models.ForeignKey(Doc, related_name='images')
    image = FileBrowseField("Docs", max_length=200,
            directory="doc_img/%Y/%m/%d/%H/%M/%S/", 
            extensions=[".jpg",".tif"], blank=True, null=True)

视图.py

def doc_detail(request, dosc_no):

    res = Doc.objects.filter(doc_no = dosc_no)        
    return render_to_response("doc/doc_detail.html",  {"result": res})

模板:

{% for i in docimage.property_set.all %}

{{ i.image.url }}  

{% endfor %}

我已经尝试过上面的模板,但我没有得到任何结果。所以我想在 DocImage 类中获取 imageurl 地址...

一切都有帮助

4

2 回答 2

47

如果您查看外键文档,如果您有类似的关系

Doc -> has many DocImages

您需要在 DocImages 类上定义外键,如下所示:

class DocImage(models.Model):
    property = models.ForeignKey(Doc, related_name='images')

如果您不设置相关名称,则可以从 Doc 访问 DocImages,例如:

Doc.docimage_set.all()

相关对象的文档

但是related_name在属性字段中设置可以让你做

Doc.images.all()

只需确保您在视图上下文中传递给模板的任何内容都与模板中使用的内容相匹配,例如

# in the view
return render_to_response('mytemplate.html', { 'mydoc' : doc, 'mydocimage' : img }

然后可以在模板中使用它,如下所示:

# and in your template to get the images attached to the document
{% for i in mydoc.images.all %}
    ...
{% endfor %}

# or to get the document the image belongs to
{{ mydocimage.property.date_added }}
于 2012-09-05T13:10:51.283 回答
6
  • 首先你迭代结果
  • 与 Doc 相关的图像由 doc 的 images 属性检索,该属性由 ForeignKey 中的 related_name 属性生成

代码:

{% for doc in result %}
  {% for docimage in doc.images.all %}
    {{ docimage.image.url }}
  {% endfor %}
{% endfor %}
于 2012-09-05T13:08:27.307 回答