Django - сохранить несколько входных параметров в базу данных - PullRequest
0 голосов
/ 16 января 2020

Я использую следующую пользовательскую форму в моем приложении 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, оба получают один и тот же идентификатор, тогда как я ожидал, что каждое поле формы будет отображено:

<input type="text" name="VideoURL" value="https://videourl.com" maxlength="100" class="form-control shadow-soft" required="" id="id_VideoURL">

Я не понимаю, чего мне не хватает.

1 Ответ

0 голосов
/ 16 января 2020

Каждый ModelForm имеет метод save () . Этот метод создает и сохраняет объект базы данных из данных, привязанных к форме. Подкласс ModelForm может принять существующий экземпляр модели в качестве экземпляра аргумента ключевого слова; если это указано, save () обновит этот экземпляр. Если он не указан, save () создаст новый экземпляр указанной модели:

ПРИМЕР 1 с формами .ModelForm

forms.py

class UpdateURLForm(forms.ModelForm):    
    class Meta:
        model = Listing
        fields = ['video_url', 'main_description']

Таким образом, вы можете облегчить сохранить вашу форму.

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)

Вы также можете импортировать свою модель и создать объект,

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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...