我正在保存一个表单,该表单具有为其中一个字段生成的随机值。我也有一个manyToMany关系,可以为null。我想要完成的是,在生成表单时保存表单,然后检索它以更新表单。
当我使用管理控制台保存表单时,它确实让我保存而不添加任何内容,因为对于模型的所有字段都有null = True和blank = True。
views.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对象没有属性cleaning_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)
答案 0 :(得分:0)
除非您先致电form.save()
,否则无法致电form.is_valid()
。
答案 1 :(得分:0)
您有一个form.save()方法调用,没有绑定到表单的数据:
else:
form = EventForm()
form.save()
request.session['event_id'] = form['eventID'].value()
因此,由于它是一个模型形式,它会查找已清理的数据,但它不存在。