Как передать данные модели в шаблон, используя Django? - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь передать данные из модели Django в шаблон HTML, используя представление на основе классов.

urls.py

from django.urls import path
from app import views

urlpatterns = [
    path('review/', views.ReviewRecord.as_view(template_name='review.html'), name='review')
]

models.py

from django.db import models

class MyModel(models.model):
    RegNumber = models.TextField(primary_key=True)
    Description = models.TextField(null=True)

views.py

from app.models import MyModel
from django.views.generic import TemplateView

class ReviewRecord(TemplateView)
    template_name = 'review.html'
    model = myModel

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['description'] = self.model.description
        return context

html

<textarea readonly>{{ description }}</textarea>

Приведенный выше код вставляет в текстовое поле html следующее:

<django.db.models.query_utils.DeferredAttribute object at 0x0000024C449B9F88>

Мне нужно отобразить сохраненные данные поля из модели, а не данные объекта, как указано выше.

Я пытаюсь создать набор запросов на основе поля в модели, например, для конкретного RegNumber. В конце концов я хотел бы получить несколько записей и иметь возможность их увеличения, но в настоящее время я просто пытаюсь заставить одну работать. Я также пытался использовать DetailView, используя первичный ключ в URL, однако я продолжаю получать ошибки, поэтому приведенный пример кода взят из того, что, похоже, является моей ближайшей попыткой достижения моей цели.

Ответы [ 2 ]

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

Вам нужно передать экземпляры модели / набор запросов вместо класса модели , как указано в комментариях

class ReviewRecord(TemplateView):
    template_name = 'review.html'
    model = Mymodel
    pk = 1

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        # specfic instance description
        context['Description'] = Mymodel.objects.get(pk=self.pk).Description
        # all instances' descriptions
        context['all_descriptions'] = Mymodel.objects.values_list('Description', flat=True)
        # pass other variables
        context['other_var'] = 'other_var'
        return context
0 голосов
/ 01 апреля 2020

Очень простой способ сделать то, что вам нужно, это:

views.py


from django.shortcuts import render
from .models import MyModel

def review_view(request, *args, **kwargs):

    # Getting all the stuff from database
    query_results = MyModel.objects.all();

    # Creating a dictionary to pass as an argument
    context = { 'query_results' : query_results }

    # Returning the rendered html
    return render(request, "review.html", context)

models.py: Здесь убедитесь, что вы пишете модели. Модели вместо моделей. модель

from django.db import models

class MyModel(models.Model):
    RegNumber = models.TextField(primary_key=True)
    Description = models.TextField(null=True)

urls.py

from django.urls import path
from app.views import review_view

urlpatterns = [
    path('review/', review_view , name='review')
]

Файл обзора. html. Убедитесь, что вы указали правильный DIR для шаблонов в файле settings.py, чтобы избежать ошибки "шаблон не найден"

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>

<body>

        {% for item in query_results %}
           <h1>{{ item.RegNumber }}</h1>
           <p>{{ item.Description }}</p>
        {% endfor %}

</body>
</html>
...