2013-10-16 56 views
0

我正在保存一個窗體,該窗體具有爲其中一個字段生成的隨機值。我也有一個manyToMany關係可以爲null。我想要完成的是在生成時保存表單,並在稍後檢索它來更新它。帶有ManyToManyField的窗體blank = True和null = True不保存沒有form.is_valid()

當我用管理控制檯保存表單時,它確實允許我保存而不添加任何內容,因爲模型的所有字段都有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) 

我試圖與當我創建一個新的表單實例的其他代碼form.is_valid,但它不進入if條件本身(儘管在未提及碼)。

使用當前的代碼,它返回錯誤。 「EventForm對象沒有任何屬性cleared_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) 

回答

0

你不能打電話除非您先致電form.is_valid(),否則請致電form.save()

+0

我知道它不允許。我在問題中提到過。我試着用form.is_valid,但它沒有進入「if」循環。這可能是什麼原因? – Akshay

+0

你看過它沒有通過is_valid檢查嗎?檢查完成後'form.errors'中有什麼? – jproffitt

+0

@jpproffitt它的確說有些字段是必需的。但我已經使用默認值初始化這些字段..那麼爲什麼它仍然返回False? – Akshay

0

你有沒有綁定到表單數據form.save()方法調用:

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

因此,因爲它是一個的ModelForm,它看起來對清理的數據,但它不存在。

+0

我怎樣才能保存表格,然後一旦我生成它?我可以通過什麼數據...我希望能夠存儲表單中的任何已經填寫的形式..以後檢索更新它..任何想法,我應該如何進行? – Akshay

+0

爲什麼保存一張沒有任何內容的表單?要保存輸入到表單中的數據並在稍後檢索,您需要一個模型和一個模型表單。這些都在文檔中。 – professorDante

+0

哦,是的,我知道這一點,我確實有一個模型,並且我使用的是一個模型表單。當我在表單中輸入一些數據並轉到另一個頁面時,窗體對於其中一個字段具有隨機值我希望所有數據在我再次返回到該頁面時保持不變。所以,當我點擊鏈接時,我想保存表格中的任何內容。我希望這有幫助! – Akshay

相關問題