環境
- Python: 3.7.2
- Django: 2.0.13
実装
- modelを定義し、modelformを作る。
project/app/models.py
from django.db import models
class SampleModel(models.Model):
field1 = models.CharField(verbose_name='フィールド1', max_length=200)
field2 = models.CharField(verbose_name='フィールド2', max_length=200)
field3 = models.CharField(verbose_name='フィールド3', max_length=200)
field4 = models.CharField(verbose_name='フィールド4', max_length=200)
project/app/forms.py
from django import forms
from .models import SampleModel
class SampleCreateForm(forms.ModelForm):
class Meta:
model = SampleModel
fields = ('field1', 'field2', 'field3')
- fieldsに含まれていない field4を自分で設定したい
project/app/views.py
from django.views.generic import CreateView
from django.shortcuts import redirect
from .models import SampleModel
from .forms import SampleCreateForm
class SampleCreateView(CreateView):
model = SampleModel
form_class = SampleCreateForm
def post(self, request, *args, **kwargs):
context_object_name = 'sample_create'
form = self.form_class(request.POST)
if form.is_valid():
obj = form.save(commit=False)
obj.field4 = 'ここに値を書き込む'
obj.save()
return redirect('sample_detail', pk=obj.pk)
sample_create = SampleCreateView.as_view()
-
save() を commit=False で呼び出すと、データベースに保存する前のモデルオブジェクトを返してくれるらしい
-
他にいい方法があったら教えてください><