django에서 ModelForm 학습 시리즈의 ~save 방법

3739 단어 djangosaveModelForm
우리는 직접 예를 들어 설명한다.
modes.py 코드는 다음과 같습니다.
from django.db import models
from django.forms import ModelForm

TITLE_CHOICES = (
    ('MR', 'Mr.'),
    ('MRS', 'Mrs.'),
    ('MS', 'Ms.'),
)

class Author(models.Model):
    name = models.CharField(max_length=100)
    title = models.CharField(max_length=3, choices=TITLE_CHOICES)
    birth_date = models.DateField(blank=True, null=True)

    def __unicode__(self):
        return self.name

class Book(models.Model):
    name = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
forms.py 코드는 다음과 같습니다.
class AuthorForm(ModelForm):
    class Meta:
        model = Author

class BookForm(ModelForm):
    class Meta:
        model = Book

다음은 save 방법을 알려드릴게요.
본 save 방법은 다음과 같은 몇 가지 형식이 있을 수 있다.
<1>페이지post를 통해 온 데이터form을 수신하여 데이터베이스에 직접 저장하고 대응하는modes의 새로운 대상을 생성할 수 있습니다. 왜 만들어야 하는지는 다음에 설명합니다...이것은 주로 정보를 저장하는 데 쓰인다
4
 f = ArticleForm(request.POST)
new_article = f.save()
<2> 데이터베이스에서 모델의 대상을 추출한 다음에form 매개 변수 instance 방법을 통해 이form을 실례화할 수 있다. 이것은 구체적인 정보를 보기 위한 것이다.
4
 a = Article.objects.get(pk=1)
 f = ArticleForm(instance=a)
 f.save()
<3>는post와 instance가 있으면post를 위주로 하는데 이것은 구체적인 정보를 수정하는 데 사용된다.
4
a = Article.objects.get(pk=1)
f = ArticleForm(request.POST, instance=a)
f.save()
<4> 특히 주의해야 할 것은save 방법에는commit라는 매개 변수가 있는데 기본적으로true이다. 즉, f.save()를 사용할 때 데이터를 데이터베이스에 저장하지만 commit=false를 표시하면 데이터베이스에 저장하지 않는다. 이것은 위에 new에서 나온 새로운 대상이 작용하기 때문에 데이터에 대해 다른 수정을 할 수 있다. 이것은 뒤에서 설명할 것이다. 거의 몇 가지 방법은 다음과 같다.
다음은 완전한 사례를 붙인다. - 주로 보존을 대상으로 하고 다른 것은 여러분이 직접 해 보셔도 됩니다.
models와forms는 위로 당겨주세요.
urls.py:
urlpatterns=patterns('',
url(r'^test/modelform/$',testModelForm,name='testModelForm'),
)

views.py
def testModelForm(request):
#    a=Author.objects.get(pk=1)
#    form=AuthorForm(instance=a)
    form=AuthorForm()
    if request.method=='POST':
        form=AuthorForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('welcome'))
    return render_to_response('testModelForm.html',locals(),RequestContext(request))

html:
{% extends 'base.html' %}
{% block title %}  ModelForm{% endblock %}
{% block content %}
    <form method="post" action=".">{% csrf_token %}
        <table>
            <tr><td><lable for='id_name'>   :</lable></td><td>{{ form.name }}</td><td>{{ form.name.errors }}</td></tr>
            <tr><td><lable for='id_title'>  :</lable></td><td>{{ form.title }}</td><td>{{ form.title.errors }}</td></tr>
            <tr><td><lable for='id_birth_date'>    :</lable></td><td>{{ form.birth_date }}</td><td>{{ form.birth_date.errors }}</td></tr>
            <tr><td><input type="submit" value="  " /></td><td><input type="reset" value="  "/></td><td></td></tr>
        </table>
    </form>
{% endblock %}

후속은 다음 절...

class AuthorForm(ModelForm):
    class Meta:
        model = Author

class BookForm(ModelForm):
    class Meta:
        model = Book

좋은 웹페이지 즐겨찾기