2014-11-07 3 views
0

안녕하세요. 사용자가 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 

보기

페이지가 잘로드되지만 제출할 때 프로젝트 이름에 다음과 같이 표시됩니다.

올바른 값을 입력하십시오.

입력 한 값이 프로젝트 이름 테스트입니다.

+0

하지 문제를,하지만 당신은이'clean' 방법을 가질 수 없습니다 - 클래스를 정의 할 때 두 번째는 단순히 첫째을 덮어 쓰게됩니다 :

내가 대신 기대. 어쨌든'clean_website'와'clean_github' 메소드를 정의하고 싶을 것입니다. –

+0

들여 쓰기를 처리 할 수 ​​있습니까? –

답변

0

view 기능에서 나는 project의 출처가 어디인지 알 수 없습니다.

project = form.save(commit=False) 
project.creator = request.user 
project.save() 
+0

고마워, 실제로 프로젝트 = form.save 라인을 추가했지만 버그는 남아있다. – joeknows718