2011-01-10 40 views
2

我有在Django一個模型,使毛坯兩個日期字段:Django的:在形式的多個日期字段,允許空白項的問題

class ReleaseStream(models.Model): 
    name = models.CharField(max_length=200,db_column='name') 
    version = models.CharField(max_length=20,blank=True,db_column='version') 
    target_date = models.DateTimeField(null=True,blank=True,db_column='target_date') 
    actual_date = models.DateTimeField(null=True,blank=True,db_column='actual_date') 
    description = models.TextField(db_column='description') 

...和表單定義:

class ReleaseStreamForm(ModelForm): 

    class Meta: 
     model = ReleaseStream 

當表單出現時,我可以填寫「target_date」的值,而不是「actual_date」字段,並且當form.save()觸發時,它似乎將爲「target_date」提供的值寫入兩個領域。我已經查看了進入form.save()代碼的post數據,它肯定有一個「target_date」值和一個「actual_date」的值,所以我不認爲有什麼奇怪的表單本身,POST中的變量名等等。

現在,如果我爲「actual_date」提供了一個非空值,form.save()做了正確的事情 - 「target_date」和「actual_date 「寫入了正確的值。我做錯了什麼,或者這可能是django中的一個錯誤?

這裏是模板(對不起,下面:)

{% extends "base.html" %} 

{% block title %}{{ form_title }}{% endblock %} 
{% block subtitle %}{% endblock %} 

{% block content %} 

    <form action={{ action_url }} method="post"> 
     <table> 
     {{ form.as_table }} 
     </table> 
     <input type="submit" value="Submit" /> 
    </form> 

{% endblock %} 

空白評論,並處理表單代碼:

def edit_release_stream(request,req_release_stream_id=None): 
    form_title = 'Edit release stream' 
    if request.method == 'POST': 
     if req_release_stream_id!=None: 
      release_stream_entry=ReleaseStream.objects.get(pk=req_release_stream_id) 
      form = ReleaseStreamForm(request.POST,instance=release_stream_entry) 
     else: 
      form = ReleaseStreamForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect('/releases/') 
    elif req_release_stream_id!=None: 
     release_stream_entry=ReleaseStream.objects.get(pk=req_release_stream_id) 
     form = ReleaseStreamForm(instance=release_stream_entry)   
    else: 
     form_title = 'Add new release stream' 
     form = ReleaseStreamForm() 

    return render_to_response('dashboard/tableform.html', { 
     'action_url': request.get_full_path(), 
     'form_title': form_title, 
     'form': form, 
    }) 

...而在後的數據來:

<QueryDict: {u'name': [u'NewRelease'], u'target_date': [u'2011-06-15 00:00'], u'version': [u'4.5.1'], u'actual_date': [u''], u'description': [u'']}> 

你可以看到它有一個有效的POST變量「actual_date」,它是一個空字符串。這篇文章產生了一個form.save(),它存儲了上面爲「target_date」和「actual_date」提供的「target_date」字符串。

如果我再運行與兩個日期不同值後 - 在這裏是後:

<QueryDict: {u'name': [u'NewRelease'], u'target_date': [u'2011-06-15 00:00'], u'version': [u'4.5.1'], u'actual_date': [u'2011-07-15 00:00'], u'description': [u'']}> 

在這種情況下,有兩種截然不同的,非空字符串,它寫在顯示正確的值將上面的POST放入db中的每個字段中。

回答

0

我不認爲它是Django中的一個bug,或者很久以前有人會看到這個問題。你能告訴我們呈現表單的模板嗎?另外,如果你可以顯示request.POST的內容,那也是有用的。

我猜你的模板代碼是不正確的。我能想到的唯一的其他問題將是您的表單中的自定義驗證(如果有的話)。這是您提供的整個ModelForm定義嗎?

+0

這裏是模板: – 2011-01-11 03:24:26

相關問題