안녕하세요. 사용자가 Django 1.5에서 개발 한 웹 사이트에서 작업중인 프로젝트를 공유하도록 입력 양식을 설정 했으므로 모델,보기 및 양식 모델을 만들었습니다. 작업중인 프로젝트에 대한 링크를 추가하십시오.유효성 검사 오류 Django Form
모델이 작동하고 관리자 패널을 통해 텍스트를 입력하면 새 개체가 만들어지고보기가 모두 작동하고 양식이로드되며 입력을받는 것처럼 보입니다. 프로젝트 이름 필드는 계속 잘못된 것을 던지기 시작합니다. 양식을 채울 때 입력 오류가 발생합니다. 왜 문자열을 입력했는지, 모델 및 양식 모델에서 CharField로 필드가 지정 되었기 때문에 이유를 모르겠습니다.
모델 :
@login_required
def add_project(request):
context = RequestContext(request)
if request.method == 'POST':
form = ProjectForm(request.POST)
if form.is_valid():
form.save(commit=False)
project.creator = request.user
project.save()
return index(request)
else:
print form.errors
else:
form = ProjectForm()
return render_to_response('rango/add_project.html', {'form' : form}, context)
폼 모델 :
class ProjectForm(forms.ModelForm):
project_name = forms.CharField(max_length=128, help_text="What is the name of your project?")
website = forms.CharField(max_length=200, help_text="Enter the project website:")
github = forms.CharField(max_length=200, help_text="Enter the project github:")
description = forms.CharField(widget=forms.Textarea, help_text="Description:")
likes = forms.IntegerField(widget=forms.HiddenInput(), initial=0)
class Meta:
model = Project
exclude = ('creator')
def clean(self):
cleaned_data = self.cleaned_data
website = cleaned_data.get('website')
#If Url is not empty and dont start with 'http://' prepend 'http://'
if website and not website.startswith('http://'):
website = 'http://' + website
cleaned_data['website'] = website
return cleaned_data
def clean(self):
cleaned_data = self.cleaned_data
github = cleaned_data.get('github')
#If Url is not empty and dont start with 'http://' prepend 'http://'
if github and not github.startswith('http://'):
github = 'http://' + github
cleaned_data['github'] = github
return cleaned_data
그리고 마지막으로 HTML 템플릿 :
{% extends 'rango/base.html' %}
{% block title %} Add Project {% endblock %}
{% block body_block %}
<H1>Add a new Project</H1>
<form id="project_form" method="post" action="/rango/add_project/">
{% csrf_token %}
{% for hidden in form.hidden_fields %}
{{hidden}}
{% endfor %}
{% for field in form.visible_fields %}
{{field.errors}}
{{field.help_text}}
{{field}}
{% endfor %}
<input type="submit" name="submit" value="Create Project" />
</form>
{% endblock %}
프로젝트를 추가
class Project(models.Model):
creator = models.ForeignKey(User)
project_name = models.CharField(max_length=128)
website = models.URLField(blank=True)
github = models.URLField(blank=True)
description = models.CharField(max_length=255, unique=True)
likes = models.IntegerField(default=0)
def __unicode__(self):
return self.nam
보기
페이지가 잘로드되지만 제출할 때 프로젝트 이름에 다음과 같이 표시됩니다.
올바른 값을 입력하십시오.
입력 한 값이 프로젝트 이름 테스트입니다.
하지 문제를,하지만 당신은이'clean' 방법을 가질 수 없습니다 - 클래스를 정의 할 때 두 번째는 단순히 첫째을 덮어 쓰게됩니다 :
내가 대신 기대. 어쨌든'clean_website'와'clean_github' 메소드를 정의하고 싶을 것입니다. –
들여 쓰기를 처리 할 수 있습니까? –