Получение данных из базы данных django

Итак, как получить данные из базы данных django? У меня есть django models и я создал там 2 объекта. Я хочу получить 2 объекта и записать в html файл. админ панель: https://i.stack.imgur.com/7WUZr.png

view.py

    def vds(request):
    HTML_STRING = render_to_string("vds.html", context=context1)
    return HttpResponse(HTML_STRING)
VDSTARIFS_obj = VDSTARIFS.objects.get(id=1)
context1 = {
    "prise": VDSTARIFS_obj.prise,
}

файл с моделями

class VDSTARIFS( models.Model):
    prise = models.CharField(max_length= 10,)
    
    def __str__(self):
        return str(self.prise)```

Это должно работать

def vds(request):
    VDSTARIFS_obj = VDSTARIFS.objects.get(id=1)
    context1 = {
        "prise": VDSTARIFS_obj.prise,
    }
    HTML_STRING = render_to_string("vds.html", context=context1)
    return HttpResponse(HTML_STRING)

Ссылка на документацию Django:

https://docs.djangoproject.com/en/3.2/intro/tutorial03/#a-shortcut-render

from django.shortcuts import render
from .models import Question

def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)

Отредактировано для вашей модели

from django.shortcuts import render
from .models import VDSTARIFS

def vds(request):
    ALL_VDSTARIFS = VDSTARIFS.objects.all()
    FIRST_VDSTARIF = ALL_VDSTARIFS[:1]

    # Get prise
    prise = FIRST_VDSTARIF.prise

    # Alternatives to print 'prise' in template 

    # Pass only the first item of vds list
    context = {
        "FIRST_VDSTARIF": FIRST_VDSTARIF
    }

    # Pass prise only
    
    context = {
        "prise": prise
    }

    # All records in html also the needed one in separated item
    context = {
        "ALL_VDSTARIFS": VDSTARIFS,
        "FIRST_VDSTARIF": FIRST_VDSTARIF
    }

    return render(request, 'vds.html', context)
}

В шаблоне вы можете использовать if https://docs.djangoproject.com/en/3.2/ref/templates/builtins/#if

{# Runs along all tarifs and print only one, not good. #}
{% for vdstarif in ALL_VDSTARIFS %}
 {% if vdstarifs.id == "1" %}
   {{ vdstarif.prise }}
 {% endif %}
{% endfor %}

{# Only print the needed one #}
{{ FIRST_VDSTARIF.prise }}


{# Print prise #}
{{ prise }}

Вы можете следовать конвенциям кодирования python и django и моим предложениям.

Rename VDSTARIFS -> VdsTarif (посмотрите на свою страницу администратора, Django добавляет 's' к вашей модели, чтобы сделать ее множественной)

Используйте имена единственного числа для своих моделей и добавляйте суффикс к именам переменных в представлениях, например vdstarif_list.

Для поля "prise" используйте DecimalField, похоже, что это CharField. Это prise или price? https://docs.djangoproject.com/en/3.2/ref/models/fields/#decimalfield

from django.shortcuts import render
from .models import VdsTarif

def vds(request):
   vdstarif_list = VdsTarif.objects.all()

   context = {
        "vdstarif_list" : vfstarif_list[:0].prise
   }

   return render(request, 'vds.html', context)
Вернуться на верх