フィールドの 1 つに対して生成されたランダムな値を持つフォームを保存しています。null になることができる manyToMany 関係もあります。私が達成したいのは、生成時にフォームを保存し、後で取得して更新することです。
管理コンソールでフォームを保存すると、モデルのすべてのフィールドに null=True と blank=True があるため、フォームに何も追加せずに保存できます。
ビュー.py
def event(request):
if request.POST:
form = EventForm(request.POST)
if form.is_valid():
form.save()
del request.session['event_id']
return HttpResponseRedirect('....')
else:
event_session = request.session.get('event_id')
if event_session is not None:
event_instance = EiEventType.objects.get(eventID = event_session)
form = EiEventForm(instance=event_instance)
form.save(force_update=True)
else:
form = EventForm()
form.save()
request.session['event_id'] = form['eventID'].value()
args = {}
args.update(csrf(request))
args['form'] = form
return render_to_response('.....',args)
新しいフォームインスタンスを作成するときにelseコードでform.is_validを試してみましたが、if条件自体には入りません(コードには記載されていませんが)。
現在のコードでは、エラーが返されます。「EventFormオブジェクトにはCleaned_data属性がありません」がデータベースに保存されます..フォームに何もせずに投稿(request.POST)すると、問題なく保存されますが、なぜそうなのか理解できませんか?
更新: forms.py
class EventForm(forms.ModelForm):
class Meta:
model = EiEventType
models.py
class Event(models.Model):
eventID = models.CharField(null=True,blank=True,default=random_eventID)
start = models.DateTimeField(null=True, default=two_min_from_now)
signal = models.ManyToManyField(Signal,null=True)
...
...
...
ランダム関数は次のように定義されます。
def random_eventID()
return "event_" + str(uuid.uuid4())[:5]
def two_min_from_now()
return datetime.datetime.now() + timedelta(minutes=2)