Relacja klucza obcego Django w szablonie

Wiem, że powiesz, że to pytanie jest zadawane wcześniej wiele razy, ale jeszcze go nie rozwiązałem...

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

Szablony:

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

{{ i.image.url }}  

{% endfor %}

Próbowałem powyżej szablonu, ale nie dostałem żadnego wyniku. więc chcę dostać adres zdjęcia na zajęciach DocImage...

Wszystko pomaga

Author: Aragon, 2012-09-05

2 answers

Jeśli przejrzysz dokumentację klucza obcego , Jeśli masz relację jak

Doc -> has many DocImages

Musisz zdefiniować swój klucz obcy na klasie DocImages w następujący sposób:

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

Jeśli nie ustawisz powiązanych nazw, możesz uzyskać dostęp do obrazów z dokumentu, takich jak:

Doc.docimage_set.all()

Docs on Related Objects

Ale ustawienie related_name w polu właściwości pozwala wykonać

Doc.images.all()

Upewnij się, że to, co PRZEKAZUJESZ do szablonu w kontekście widoku, pasuje do tego, co jest używany w szablonie, np.

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

To może być użyte w szablonie w następujący sposób:

# 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 }}
 42
Author: will-hart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-23 20:21:29
  • najpierw powtarzasz wynik
  • obrazy powiązane z Doc są pobierane przez właściwość images of doc, która jest generowana z atrybutu related_name w ForeignKey

Kod:

{% for doc in result %}
  {% for docimage in doc.images.all %}
    {{ docimage.image.url }}
  {% endfor %}
{% endfor %}
 6
Author: Christian Thieme,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-05 13:08:27