我在Django
应用中使用以下自定义表单:
forms.py
class UpdateURLForm(forms.ModelForm):
VideoURL = forms.URLField()
MainDescription = forms.CharField(max_length=100)
class Meta:
model = Listing
fields = ('VideoURL', 'MainDescription',)
然后,在 views.py
中,导入表单,然后将字段呈现到我的HTML
模板中:
def edit_info(request):
if request.method == 'POST':
form = UpdateURLForm(request.POST)
if form.is_valid():
VideoURL = form.cleaned_data['VideoURL']
MainDescription = form.cleaned_data['MainDescription']
else:
form = UpdateURLForm()
return render(request, 'myapp/updateinfo.html', {'form': form})
HTML
:
<form action="#" method='post' class="card shadow-soft border p-4 mb-4">{% csrf_token %}
<div class="form-group">
<label for="video">Video URL:</label>
{{form.VideoURL|add_class:"form-control shadow-soft"}}
</div>
<div class="form-group">
<label for="video">Video URL:</label>
{{form.MainDescription|add_class:"form-control shadow-soft"}}
</div>
<div class="row">
<div class="col">
<button class="btn btn-primary btn-dark mt-2 animate-up-2 text-right"
type="submit">Update</button>
</div>
</div>
</form>
现在,我的问题是:如何在模板中呈现字段MainDescription
以便将这两种信息都保存到数据库中?我渲染第二个字段(MainDescription
)的方式不起作用。谢谢!
修改
因此,我有两个自定义表单字段(VideoURL和MainDescription),我想使用它们来更新数据库中的某些信息。当我尝试在HTML
模板中进行渲染时,两者都获得了相同的ID,而我期望要渲染表单的每个字段:
<input type="text" name="VideoURL" value="https://videourl.com" maxlength="100" class="form-control shadow-soft" required="" id="id_VideoURL">
我不知道自己在想什么。
答案 0 :(得分:0)
每个ModelForm都有一个save()方法。此方法从绑定到表单的数据创建并保存数据库对象。 ModelForm的子类可以接受现有的模型实例作为关键字参数实例。如果提供了此参数,则save()将更新该实例。如果未提供,则save()将创建指定模型的新实例:
带有Forms.ModelForm的示例1
forms.py
class UpdateURLForm(forms.ModelForm):
class Meta:
model = Listing
fields = ['video_url', 'main_description']
因此,您可以简化save的表格。
views.py
def edit_info(request):
if request.method == 'POST':
form = UpdateURLForm(request.POST)
if form.is_valid():
instance = form.save()
else:
form = UpdateURLForm()
return render(request, 'myapp/updateinfo.html', {'form': form})
带有表单的示例2。表单
forms.py
class UpdateURLForm(forms.Form):
video_url = forms.URLField(label="Video Url")
main_description = forms.CharField(label="Description", max_length=100)
您还可以导入模型和create an object。
views.py
from models import Listing
def edit_info(request):
if request.method == 'POST':
form = UpdateURLForm(request.POST)
if form.is_valid():
listing = Listing(video_url=form.cleaned_data.get('video_url'), main_description=form.cleaned_data.get('main_description'))
listing.save()
else:
form = UpdateURLForm()
return render(request, 'myapp/updateinfo.html', {'form': form})