Включение внешних ключей объекта и объекта в один запрос Django - PullRequest
0 голосов
/ 27 марта 2020

У меня есть следующие модели:

class Document(models.Model):
    name = models.CharField(max_length=30, null=True, blank=True) 
    reference = models.CharField(max_length=30, null=True, blank=True)

    def __str__(self):
         return self.Name

class Subdocument(models.Model)
    document = models.ForeignKey(Document, null=True, default=None)
    pdf = models.FileField(upload_to='media')

В конечном итоге я хочу показать name из документа и pdf из поддокумента в одном и том же <li> в моем шаблоне в течение для l oop. Так что это может быть что-то вроде:

{% for item in something %}
      <li class="list-group-item">
        {{ item.Name }} {{ item.pdf }}
      </li>
{% endfor %}

Моя проблема в том, что они в отдельных моделях, я не уверен, как получить поля из обеих. Итак, какой запрос или запросы я могу выполнить в своем представлении, чтобы сделать это возможным? Любой другой подход приветствуется, это просто для иллюстрации моей конечной цели.

Спасибо!

РЕДАКТИРОВАТЬ:

views.py

def doc_view(request):
    something = Subdocument.objects.filter(document__isnull=False)
    return render(request, 'my_template.html', context={'something': something})

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Вы пробовали что-то подобное,

# views.py
def my_view(request):
    docs = Subdocument.objects.filter(document__isnull=False)  # filtering out empty documents
    return render(request, 'my_template.html', context={'docs': docs})

# my_template.html
{% for doc in docs %}
      <li class="list-group-item">
        {{ doc.document.name }} {{ doc.pdf.url }}
      </li>
{% endfor %}
0 голосов
/ 27 марта 2020

Попробуйте

models.py заменить

name = models.CharField(max_length=30, null=True, blank=True) 

на

name = models.CharField(max_length=30, null=True, blank=False) 

шаблон

{% for item in something %}
      <li class="list-group-item">
        {{ item.document.name }} {{ item.pdf }}
      </li>
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...