Подтвердить что ты не робот

Отношение внешнего ключа 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 %}

Я пробовал шаблон выше, но я не получил никакого результата. поэтому я хочу получить imageurl-адрес в классе DocImage...

все помогает

4b9b3361

Ответ 1

Если вы просмотрите документацию внешнего ключа, если у вас есть такая связь, как

Doc -> has many DocImages

вам нужно определить свой внешний ключ в классе DocImages следующим образом:

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

Если вы не задаете связанные имена, вы можете получить доступ к DocImages из Doc, например:

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 }}

Ответ 2

  • сначала вы перебираете результат
  • изображения, связанные с Doc, извлекаются с помощью свойства images документа, которое создается из атрибута related_name в ForeignKey

код:

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