항목 :장고 : 수있는 형태로 여러 날짜 필드 빈 나는 두 개의 날짜 필드에 공백을 허용 장고의 모델이 문제
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의 각 필드에 있습니다.
템플릿은 다음과 같습니다. –
예, ModelForm이 위에서 완료되었습니다. 모델에서 자동 생성 된 기본 양식을 시도했습니다. –
그리고 커스텀 밸리데이션에 관한 마지막 질문에 답하기 위해, 나는 아직 특별한 것을 구현하지 않았다. 나는 기본적인 워크 플로우를 얻으려고 노력했지만,이 이상한 행동을했다. –