2015-11-20 300 views
1

我一直在网上查找,但无济于事。我试图从Django中的CharField获取url字符串。从CharField获取字符串

class EntryForm(forms.ModelForm): 
    class Meta: 
     model = Entry 
     fields = ['url'] 

def get_url(self): 
    temp = self.fields['url'] 
    string = temp.to_python(temp) 
    return string 

这将返回一个Unicode对象,但正如我们在终端输出中看到它不能正常打印:

url is: 
<django.forms.fields.CharField object at 0x10781b410> 

该模型是在这里:

class Entry(models.Model): 
    url = models.CharField(max_length=200) 
    article_title = models.CharField(max_length=200, default="generic title") 

    def __unicode__(self): 
     val = str(self.url) + ", " + str(self.article_title) 
     return val 

使用Python 2.7 。 任何人都可以帮忙吗? 谢谢!

+0

您可以加入您的型号请你使用的Python版本? –

+0

@LouisBarranqueiro在那里添加了模型,它的Python 2.7 –

回答

1

你应该在你views.py:

form = EntryForm(request.POST, instance=instance) 
if form.is_valid(): 
    url = form.cleaned_data['url'] 
+0

谢谢你的回答,这很有道理! –

+0

由于is_valid()会在幕后调用clean(),所以澄清了这个答案,谢谢! –

+0

http://stackoverflow.com/questions/5083493/is-valid-vs-clean-django-forms –

0

使用Form.clean()函数来获取表单数据。

def get_url(self): 
    cleaned_data = self.clean() 
    return cleaned_data.get('url') 

为什么不使用is_valid()

is_valid()在窗体上自动调用clean()。在您的视图中使用 is_valid(),在表单类中使用clean()

此功能是Form功能,而不是View功能。

+0

你不应该手动调用'clean()','is_valid()'会在场景后面调用'clean()'。 –

+0

感谢您的回答,现在有道理。我没有意识到.clean()函数,谢谢你的文档链接。 –