如何在 Django 表单中显示变量?
How to display a variable in Django forms?
我正在尝试使用我的数据库的值在表单中显示它。因此,如果用户之前已经填写了一个值,他们将在再次访问该页面时看到它。
所以有我的 HTML 文件 :
<div class="form-group row">
<label class="col-4 mt-1 text-right">Modèle</label>
<div class="col-4">
{{ form.model }}
</div>
</div>
我的 views.py 文件:
def get_car(request, identifiant):
if request.method == "POST":
form = CarForm(request.POST)
if form.is_valid():
car_instance = Car(
identifiant,
form.cleaned_data["model"]
)
car_instance.save()
return HttpResponseRedirect("/forms/car/{}".format(identifiant))
else:
form = CarForm()
form.identifiant = identifiant
return render(request, "forms/car.html", {"form": form})
我的 models.py 文件:
class Car(models.Model):
model = models.CharField(max_length=16)
(主键是自动创建的)
还有我的 forms.py 文件:
class CarForm(forms.Form):
model = forms.CharField(label="Modèle", max_length=32, widget=forms.TextInput({ "value": Car.objects.get(pk=1).model}))
我们可以在表单文件中看到我给pk赋了一个值,所以代码会从我的数据库中pk = 1的用户那里搜索这个值。我的问题是如何给出活跃用户的pk值?
使用 form = CarForm()
创建一个空表单实例。难怪表格显示为空。
我强烈建议您切换到基于 class 的视图(UpdateView 和 CreateView),因为它们正是为此类用途创建的,并且非常容易实现。
无论如何,您在这里需要做的就是使用您计划更新的对象生成表单实例。
我猜 identifiant
是汽车 ID(?)
car = Car.objects.get(id=identifiant)
form = CarForm(instance=car)
我还建议您为汽车使用 ModelForm 而不是标准表单,因为您只收集“汽车”模型中的单个字段“模型”。
class CarForm(forms.ModelForm):
class Meta:
fields = ['model']
widgets = {
'model' : forms.TextInput(),
}
labels = {
'model' : 'Modèle'
}
您可以通过这种方式添加其他属性。你真的可以从那里添加任何你想要的东西。例如:
class CarForm(forms.ModelForm):
class Meta:
fields = ['model']
widgets = {
'model' : forms.TextInput(attrs={
'placeholder': '12345678',
'class' : 'shadow-sm',
'onClick' : "myFunction(this);"
}),
}
labels = {
'model' : 'Modèle'
}
你放在那里的任何东西都会在现场呈现。因此,如果您添加 css classes,您可以将它们全部放在同一行中。例如
'class' : 'shadow-sm mx-3 bold-p text-responsive'
我正在尝试使用我的数据库的值在表单中显示它。因此,如果用户之前已经填写了一个值,他们将在再次访问该页面时看到它。
所以有我的 HTML 文件 :
<div class="form-group row">
<label class="col-4 mt-1 text-right">Modèle</label>
<div class="col-4">
{{ form.model }}
</div>
</div>
我的 views.py 文件:
def get_car(request, identifiant):
if request.method == "POST":
form = CarForm(request.POST)
if form.is_valid():
car_instance = Car(
identifiant,
form.cleaned_data["model"]
)
car_instance.save()
return HttpResponseRedirect("/forms/car/{}".format(identifiant))
else:
form = CarForm()
form.identifiant = identifiant
return render(request, "forms/car.html", {"form": form})
我的 models.py 文件:
class Car(models.Model):
model = models.CharField(max_length=16)
(主键是自动创建的)
还有我的 forms.py 文件:
class CarForm(forms.Form):
model = forms.CharField(label="Modèle", max_length=32, widget=forms.TextInput({ "value": Car.objects.get(pk=1).model}))
我们可以在表单文件中看到我给pk赋了一个值,所以代码会从我的数据库中pk = 1的用户那里搜索这个值。我的问题是如何给出活跃用户的pk值?
使用 form = CarForm()
创建一个空表单实例。难怪表格显示为空。
我强烈建议您切换到基于 class 的视图(UpdateView 和 CreateView),因为它们正是为此类用途创建的,并且非常容易实现。
无论如何,您在这里需要做的就是使用您计划更新的对象生成表单实例。
我猜 identifiant
是汽车 ID(?)
car = Car.objects.get(id=identifiant)
form = CarForm(instance=car)
我还建议您为汽车使用 ModelForm 而不是标准表单,因为您只收集“汽车”模型中的单个字段“模型”。
class CarForm(forms.ModelForm):
class Meta:
fields = ['model']
widgets = {
'model' : forms.TextInput(),
}
labels = {
'model' : 'Modèle'
}
您可以通过这种方式添加其他属性。你真的可以从那里添加任何你想要的东西。例如:
class CarForm(forms.ModelForm):
class Meta:
fields = ['model']
widgets = {
'model' : forms.TextInput(attrs={
'placeholder': '12345678',
'class' : 'shadow-sm',
'onClick' : "myFunction(this);"
}),
}
labels = {
'model' : 'Modèle'
}
你放在那里的任何东西都会在现场呈现。因此,如果您添加 css classes,您可以将它们全部放在同一行中。例如
'class' : 'shadow-sm mx-3 bold-p text-responsive'