2011-01-10 2 views
2

항목 :장고 : 수있는 형태로 여러 날짜 필드 빈 나는 두 개의 날짜 필드에 공백을 허용 장고의 모델이 문제

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 

양식이 나타나면 "actual_date"필드가 아닌 "target_date"값을 채울 수 있으며 form.save()가 실행되면 "target_date"값이 둘 다에 기록됩니다 전지. 나는 post.save()를 수행하는 코드로가는 포스트 데이터를 보았고 "target_date"와 "actual_date"에 대한 값을 가지고있다. 그래서 나는 이상한 것이 있다고 생각하지 않는다. 양식 자체, POST의 변수 이름 등이 포함됩니다.

"actual_date"에 대해 비어 있지 않은 값을 제공하면 form.save()가 올바른 작업을 수행합니다. "target_date"와 "actual_date" "올바른 값을 쓰십시오. 내가 잘못했거나 잠재적으로 장고에 버그가 있습니까? 여기

는 :

{% 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'']}> 

"actual_date"의 유효한 POST var가 있으며 문자열이 비어있는 것을 볼 수 있습니다. 이 게시물은 "target_date"및 "actual_date"에 대해 "target_date"에 대해 위에 제공된 문자열을 저장하는 form.save()를 생성합니다. -

그때 두 날짜 값을 다른 소식을 실행하면 여기가 게시물 :이 경우

<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

장고에있는 버그라고 생각하지 않거나 누군가가 오래 전에이 문제를 보았을 것입니다. 양식을 렌더링하는 템플릿을 보여줄 수 있습니까? 또한 요청의 내용을 표시 할 수 있다면 .POST도 유용 할 것입니다.

템플릿 코드가 어딘지 잘못되었다고 생각합니다. 내가 생각할 수있는 유일한 다른 문제는 양식에 사용자 정의 유효성 검사 (있을 경우)입니다. 당신이 제공 한 ModelForm 정의 전체입니까?

+0

템플릿은 다음과 같습니다. –

+0

예, ModelForm이 위에서 완료되었습니다. 모델에서 자동 생성 된 기본 양식을 시도했습니다. –

+0

그리고 커스텀 밸리데이션에 관한 마지막 질문에 답하기 위해, 나는 아직 특별한 것을 구현하지 않았다. 나는 기본적인 워크 플로우를 얻으려고 노력했지만,이 이상한 행동을했다. –

관련 문제