web-dev-qa-db-ja.com

Djangoテンプレートの外部キー関係

私はあなたがこの質問が何度も前に尋ねられると言うでしょうが、私はまだそれを解決していません...

models.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)

views.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アドレスを取得したいので...

すべてが役立ちます

21
Aragon

foreign key documentation を確認した場合、次のような関係がある場合

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 }}
38
will-hart
  • 最初に結果を繰り返します
  • docに関連する画像は、ForeignKeyのrelated_name属性から生成されるdocのimagesプロパティによって取得されます

コード:

{% for doc in result %}
  {% for docimage in doc.images.all %}
    {{ docimage.image.url }}
  {% endfor %}
{% endfor %}
6