首页 文章

具有ManyToManyField的表单空白= True且null = True如果没有form.is_valid()则不保存

提问于
浏览
0

我正在保存一个表单,该表单具有为该字段之一生成的随机值 . 我也有一个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)表单中没有任何内容时它确实保存完美,我无法理解为什么会这样?

UPDATE: 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)

2 回答

  • 0

    除非您先调用 form.is_valid() ,否则无法调用 form.save() .

  • 0

    您有一个form.save()方法调用没有绑定到表单的数据:

    else:
            form = EventForm()
            form.save()
            request.session['event_id'] = form['eventID'].value()
    

    因此,由于它是一个模型形式,它会查找已清理的数据,但它不存在 .

相关问题