Django-将多个输入参数保存到数据库

时间:2020-01-16 14:43:34

标签: django python-3.x

我在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">

我不知道自己在想什么。

1 个答案:

答案 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})