簡體   English   中英

驗證錯誤Django表單

[英]Validation Error Django Form

嘿,所以我為用戶設置了一個輸入表單,以共享他們在Django 1.5中開發的網站上正在處理的項目,我創建了模型,視圖和表單模型,以允許登錄的用戶向他們添加的項目添加鏈接正在努力。

該模型有效,當我通過管理面板輸入文本時,它創建了一個新對象,所有視圖均正常工作,加載了表單,並似乎接受了輸入,但是,當我使用“項目名稱”字段時,我總是拋出一個無效的輸入錯誤嘗試填寫表單,不確定為什么,因為我輸入了一個字符串,並且該字段在“模型”和“表單模型”中均指定為CharField。

模型:

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

用於添加項目的視圖:

@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 %}

頁面加載正常,但是當我嘗試提交時,我得到了這個作為項目名稱:

輸入有效值。

我輸入的值是測試項目名稱。

view功能中,我不了解project來自何處。

我期望代替:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM