Отображение результата SQL-запроса в форме Django
У меня есть простая веб-страница BookStore, которая должна возвращать результат запроса, содержащий информацию о книгах. Я хочу отобразить это в форме и добавить флажок перед каждым пунктом, чтобы клиент мог проверить количество книг, которые он хочет. Первый вопрос - как мне передать sql запрос в форму django (форма должна быть Charfield с отключаемым значением, установленным в true, чтобы никто не мог ее редактировать, а только видеть ее, также используется виджет textarea). Вот мой Form.py
from django.forms import ModelForm
from django import forms
from .models import Books
class Login_Form(forms.Form):
username = forms.IntegerField(label='User Name',widget=forms.TextInput, required=True)
password = forms.CharField(label='Password',widget=forms.PasswordInput, required=True)
class Book_L(forms.ModelForm):
class Meta:
model = Books
fields = "__all__"
Это Model.py модель, которую я хочу отобразить, это модель Books:
rom django.db import models
class Admins(models.Model):
adminid = models.IntegerField(db_column='AdminID', primary_key=True) # Field name made lowercase.
adminlogin = models.CharField(db_column='AdminLogin', max_length=254, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True) # Field name made lowercase.
usersecret = models.CharField(max_length=254, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True)
class Meta:
db_table = 'Admins'
class Books(models.Model):
uid = models.AutoField(db_column='UID', primary_key=True) # Field name made lowercase.
bookname = models.CharField(db_column='BookName', max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True) # Field name made lowercase.
author = models.CharField(db_column='Author', max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True) # Field name made lowercase.
category = models.CharField(db_column='Category', max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True) # Field name made lowercase.
qty = models.CharField(db_column='QTY', max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True) # Field name made lowercase.
price = models.CharField(db_column='Price', max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True) # Field name made lowercase.
class Meta:
db_table = 'Books'
class Users(models.Model):
login = models.AutoField(db_column='Login', primary_key=True) # Field name made lowercase.
pass_field = models.CharField(db_column='Pass', max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True) # Field name made lowercase. Field renamed because it was a Python reserved word.
firstname = models.CharField(db_column='FirstName', max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True) # Field name made lowercase.
lastname = models.CharField(db_column='LastName', max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True) # Field name made lowercase.
city = models.CharField(db_column='City', max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True) # Field name made lowercase.
nationalcode = models.CharField(db_column='NationalCode', max_length=255, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True) # Field name made lowercase.
addr = models.CharField(db_column='Addr', max_length=300, db_collation='SQL_Latin1_General_CP1_CI_AS', blank=True, null=True) # Field name made lowercase.
class Meta:
db_table = 'users'
Это мой View.py страница, которая должна отображать этот результат, является Homepage.html, поэтому класс Homepage:
from django.http import HttpResponse,HttpResponseRedirect
from django.template import loader
from .models import Users,Books
from django.shortcuts import render,redirect
from .forms import Login_Form
from django import forms
from django.contrib import messages
from .forms import *
from .forms import Book_L
def index(request):
return render(request, 'index.html')
def New_User(request):
return render(request, 'New_User.html')
def Homepage(request):
if request.method == 'POST':
form = Book_L(request)
context ={}
form = Book_L(request.POST or None, request.FILES or None)
return render(request,'Homepage.html',{'form' : form})
def User_Verify(request):
if request.method == 'POST':
form = Login_Form(request.POST)
if form.is_valid():
temp_user = form.cleaned_data['username']
temp_pass = form.cleaned_data['password']
User_Integrity = Users.objects.all().filter(login=temp_user,pass_field=temp_pass)
if len(User_Integrity) == 1:
return Homepage(request)
if len(User_Integrity)<1:
messages.error(request,'USER OR PASSWORD IS INVALID')
else:
form = Login_Form()
return render(request, 'User_Verify.html',{'form': form})
И наконец, моя Homepage.html :
<html>
<head>
<title>HomePage</title>
<link rel="icon" type="image/x-icon" href="/MainWinIcon.ico">
<style>
form {
background-color: black;
height:300 px
border: 15px rgb(62,245,226);
padding: 50px;
}
fieldset {
background-color: #eeeeee;
display: block;
margin-left: 2px;
margin-right: 2px;
padding-top: 0.35em;
padding-bottom: 0.625em;
padding-left: 0.75em;
padding-right: 0.75em;
border: 2px groove (internal value);
}
</style>
</head>
<body style="text-align:center;vertical-align:middle;background-color:rgb(62,245,226);">
<h1> Welcome to HomePage Select the Books you want and Press Submit </h1>
<form method="post">
<fieldset>
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</fieldset>
</form>
<h2 style="text-align:center;vertical-align:middle;background-color:grey">Books List</h2>
</body>
</html>
В основном я пытаюсь отобразить форму, которая имеет отключенную текстовую область с чекбоксом перед каждым пунктом; Пользователи будут отмечать нужные им поля и после нажатия кнопки отправить, список отобранных книг (их UID) должен быть возвращен для дальнейшей обработки (например, добавлен в другую таблицу под названием заказы)
Если это поможет, я использую microsoft sql server 2019 и я отредактировал файл настроек и соединение между базой данных и django в порядке, и он нормально возвращает результаты, когда я спрашиваю.