django - 如何从我的数据库中实现 django 中的复选框
问题描述
我需要为教师管理做一个项目。我做了一个项目,从我的数据库中选择 3 个表。我的页面上有 3 个 ModelChoiceField 和一个提交按钮。当我单击提交时,我需要重定向到一个新页面,该页面具有与我从 3 个选择字段中的选择相关的复选框列表。
模型.py:
class An(models.Model):
an_studiu = models.SmallIntegerField(primary_key=True)
class Meta:
managed = False
db_table = 'an'
def __str__(self):
strAni = ["0", "I", "II", "III", "IV", ]
return strAni[self.an_studiu]
class Disciplina(models.Model):
id = models.CharField(primary_key=True, max_length=256)
denumire = models.CharField(max_length=256, blank=True, null=True)
an_studiu = models.ForeignKey(An, models.DO_NOTHING, db_column='an_studiu', blank=True, null=True)
id_program_studii = models.ForeignKey('ProgramStudii', models.DO_NOTHING, db_column='id_program_studii', blank=True, null=True)
pondere_evaluare = models.FloatField(blank=True, null=True)
nr_lucrari = models.IntegerField(blank=True, null=True)
nr_teme = models.IntegerField(blank=True, null=True)
nr_evaluari = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'disciplina'
class Incadrare(models.Model):
semigrupa = models.ForeignKey('Semigrupa', models.DO_NOTHING, db_column='semigrupa', blank=True, null=True)
id_disciplina = models.ForeignKey(Disciplina, models.DO_NOTHING, db_column='id_disciplina', blank=True, null=True)
id_profesor = models.ForeignKey('Profesor', models.DO_NOTHING, db_column='id_profesor', blank=True, null=True)
class Meta:
managed = False
db_table = 'incadrare'
class ProgramStudii(models.Model):
id = models.CharField(primary_key=True, max_length=256)
abreviere = models.CharField(max_length=256, blank=True, null=True)
denumire = models.CharField(max_length=256, blank=True, null=True)
nr_ani_studiu = models.SmallIntegerField(blank=True, null=True)
def __str__(self):
return self.abreviere
class Meta:
managed = False
db_table = 'program_studii'
class Semigrupa(models.Model):
id = models.CharField(primary_key=True, max_length=6)
class Meta:
managed = False
db_table = 'semigrupa'
表格.py:
from django import forms
from .models import An, ProgramStudii,Disciplina
#from django.forms.widgets import SubWidget
class F1Form (forms.Form):
disciplina = forms.ModelChoiceField(queryset=Disciplina.objects.all().order_by('id'), to_field_name="denumire")
program = forms.ModelChoiceField(queryset=ProgramStudii.objects.all().order_by('id'), to_field_name="abreviere")
an = forms.ModelChoiceField(queryset=An.objects.all().order_by('an_studiu'))
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
#class F2Form(forms.Form):
视图.py:
from django.forms import forms
from django.http import HttpResponseRedirect
from django.shortcuts import render
# Create your views here.
from django.views import View
from django.views.generic import ListView, CreateView, UpdateView, TemplateView
from django.urls import reverse_lazy
from .models import ProgramStudii
from .forms import F1Form
class ProgrameListView(ListView):
model = ProgramStudii
context_object_name = 'programe'
class F1(View):
form_class = F1Form
#success_url = reverse_lazy('rezultat')
template_name = 'afdmpq1/f1_form.html'
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
# <process form cleaned data>
return HttpResponseRedirect('/f2_form.html/')
return render(request, self.template_name, {'form': form})
class F2(View):
form=F1Form
def rezultat(request):
return render(request, 'afdmpq1/f2_form.html', {} )
def rezultat2(request):
return render(request,'afdmpq1/f3_form.html',{})
f1_form.html:
{% extends 'base.html' %}
{% block content %}
<h2>F1 Form</h2>
<form method="post" id="f1Form" action ="{% url 'afdmpq1:rezultat' %}" novalidate>
{% csrf_token %}
<table>
{{ form.as_table }}
</table>
<button type="submit">Pasul urmator</button>
</form>
{% endblock %}
网址.py
from django.urls import path
from . import views
app_name ='afdmpq1'
urlpatterns = [
path('f1/', views.F1.as_view(), name='f1'),
path('', views.ProgrameListView.as_view(), name='incadrare_changelist'),
#path('<int:nr>/<int:nr1>/rezultat', views.rezultat, name='rezultat'),
path('rezultat/', views.rezultat, name='rezultat'),
path('f2/',views.F2.as_view(),name='f2')
]
复选框来自表 Semigrupa。我想在页面上显示 Semigrupa 表中的所有数据,但它们需要是复选框。我听说你可以使用 BooleanField() 但我不知道如何实现它。
解决方案
您可以尝试使用CheckboxSelectMultiple
小部件。
forms.py 会变成:
from django import forms
from .models import An, ProgramStudii,Disciplina
#from django.forms.widgets import SubWidget
class F1Form (forms.Form):
disciplina = forms.ModelChoiceField(queryset=Disciplina.objects.all().order_by('id'), to_field_name="denumire", widget=forms.CheckboxSelectMultiple())
program = forms.ModelChoiceField(queryset=ProgramStudii.objects.all().order_by('id'), to_field_name="abreviere", widget=forms.CheckboxSelectMultiple())
an = forms.ModelChoiceField(queryset=An.objects.all().order_by('an_studiu'), widget=forms.CheckboxSelectMultiple())
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
推荐阅读
- linux - 脚本不会在 crontab 上执行
- javascript - Vue - 单击按钮从一个组件转到另一个组件
- javascript - Connected component reads from Redux store, but action creators don't update it
- active-directory - MSAL 错误 - 联合 IWA 的目标主体名称不正确
- javascript - 使用电子和 Javascript 在控制台中显示完整文件夹路径
- javascript - 我对奇异的 javascript 问题很感兴趣
- angular - Angular:使用管道和选项卡时可观察到的变化行为
- c# - C# 我可以用 IEnumerable 对象和结构实现接口吗?
- android - 解析失败:Landroid/support/v7/appcompat/R$drawable;
- c++ - 使用嵌套枚举的模板参数重载 C++ 友元运算符