Как добавить связанное поле в представление из класса DetailView? - PullRequest
0 голосов
/ 09 апреля 2020

Существует две модели: Документ - информация о документе, DocVersion - текст документа в определенном издании. Связанный через ForeignKey, поскольку один документ может иметь несколько текстов с разными датами редакции.

class Document(models.Model):
    id = models.AutoField(primary_key=True)
    doc_title = models.TextField(verbose_name="Name")

class DocVersion(models.Model):
    date_version = models.DateField(verbose_name="Version date")
    document = models.ForeignKey(Document, on_delete=models.CASCADE)
    date_start = models.DateField(verbose_name="Start date")
    text = models.TextField(verbose_name="Text")

Просмотр на основе класса DetailView.

class DocumentDetailView(generic.DetailView):
model = Document

def get_context_data(self, **kwargs):
    context = super(DocumentDetailView, self).get_context_data(**kwargs)
    context['text'] = '?????text??????'
    return context

Как заполнить текст с данными из поля text модели DocVersion с самой последней date_start ?

1 Ответ

0 голосов
/ 09 апреля 2020

Поскольку один Document может иметь несколько DocVersion, вам необходимо указать, какую версию вы хотите. Если это последний, то:

class DocumentDetailView(generic.DetailView):
    model = Document

    def get_context_data(self, **kwargs):
        context = super(DocumentDetailView, self).get_context_data(**kwargs)
        context['text'] = context['object'].docversion_set.last().text
        return context

Я использую last(), чтобы получить последний DocVersion объект.

Если вы нужно весь текст из всех версий, затем:

class DocumentDetailView(generic.DetailView):
    model = Document

    def get_context_data(self, **kwargs):
        context = super(DocumentDetailView, self).get_context_data(**kwargs)
        context['texts'] = context['object'].docversion_set.all().values_list('text')
        return context

Затем вам нужно перебрать texts, чтобы отобразить его в шаблоне:

{% for text in texts %}
   {{ text }}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...