2015-11-20 299 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()函數,謝謝你的文檔鏈接。 –