2015-09-06 9 views
0

Я пытаюсь настроить форму в Django и сохранять данные в моей базе данных без использования ModelForm. Моя форма работает, но часть, на которую я застрял, - это обработка данных формы и сохранение ее в представлении. Как вы можете видеть, после «if form.is_valid():« Я застрял и не могу придумать правильный код.Сохраните данные формы в Django

# models.py 

from django.db import models 

class Listing(models.Model): 
    business_name = models.CharField(max_length=80) 
    business_email = models.EmailField() 
    business_website = models.CharField(max_length=80) 
    business_phone = models.CharField(max_length=80) 

# forms.py 

from django import forms 

class NewBusinessForm(forms.Form): 
    business_name = forms.CharField(label='Business Name', max_length=100) 
    business_phone = forms.CharField(label='Phone Number', max_length=100) 
    business_email = forms.EmailField(label='Email Address', max_length=100) 
    business_website = forms.CharField(label='Web Site', max_length=100) 

# views.py 

from django.shortcuts import render 
from django.http import HttpResponseRedirect 
from .forms import NewBusinessForm 

def new_business(request): 
    if request.method == 'POST': 
     form = NewBusinessForm(request.POST) 
     if form.is_valid(): 
      # process form data 
      return HttpResponseRedirect('/') 

    else: 
     form = NewBusinessForm() 

    return render(request, 'directory/new.html', {'form': form}) 

ответ

5

Вам необходимо создать объект и установить все поля вручную. Вот пример.

def new_business(request): 
    if request.method == 'POST': 
     form = NewBusinessForm(request.POST) 
     if form.is_valid(): 
      # process form data 
      obj = Listing() #gets new object 
      obj.business_name = form.cleaned_data['business_name'] 
      obj.business_email = form.cleaned_data['business_email'] 
      obj.business_phone = form.cleaned_data['business_phone'] 
      obj.business_website = form.cleaned_data['business_website'] 
      #finally save the object in db 
      obj.save() 
      return HttpResponseRedirect('/') 
     .... 

Обратите внимание, что объект сохранения может не работать, если значения поля не соответствуют ограничению. Поэтому вам нужно позаботиться об этом.

+1

не забудьте ввести в листинг модель –

+0

Это сработало, спасибо! Большинство людей ставят эту логику в views.py? Или лучше включить его в forms.py как функцию? – Casey

+2

@Casey, в основном это должно быть сделано с использованием форм модели. Или, если хотите, вы можете поместить эту логику в метод 'form.save()'. – Rohan

Смежные вопросы