2014-02-19 61 views
0

在我的models.py文件中,我有一個名爲'Problem'的類,它基本上存儲了一個問題,它的答案以及該問題的一些得分相關信息。下面是這個類的代碼:將Django模型字段保存到一個新文件

class Problem(models.Model): 

def CreatePath(instance, filename): 
    return ('/' + instance.problemLevel + '.' + (instance.primary_key) + '.html') 

# Use 'pkey' as problem ID 
problemName = models.CharField('Problem Name',max_length=50) 
problemText = RichTextField('Problem Statement',max_length=10000) 
testCases = models.TextField('Test Cases',max_length=4000) 
output = models.TextField('Test case result',max_length=4000) 
problemLevel = models.IntegerField('Problem Level') 
problemPoints = models.IntegerField('Points') 
problemLink = models.FileField(upload_to=CreatePath, blank=True) 


def save(self, *args, **kwargs): 
    self.problemLink = self.problemText 
    super(Problem, self).save(*args, **kwargs) 

def __unicode__(self): 
    return self.problemName 

用戶後進入通過管理頁面的問題(我使用的是CKEDITOR RTE的問題文本字段),我想Django的創建一個新的HTML頁面具體問題。假設我輸入problemLevel = 1的問題,並假設它是第一個問題,我希望將1.1.html存儲到我的問題(媒體)目錄中。所以我試圖使用一個FileField對象來達到這個目的,並且我稍微修改了save()模塊。但該文件沒有被創建。我運行內置的Django管理員shell來檢查problemLink的內容,並且它具有與problemText相同的內容。有人能告訴我我要去哪裏嗎? 我是Django的新手,如果有幫助的話!

回答

0

爲什麼要爲它創建一個HTML頁面?

通常在django中,你會將數據存儲在數據庫中 - 就像你在做的那樣 - 減去鏈接。

那麼你有一個URL在你urls.py

例如, url(r"^(?P<problemLevel>\d+)/(?P<pk>)/$", views.showProblem)

它會在您的views.py文件中調用showProblem(),這會在用戶請求http://<yourserver>/1/1/時獲取信息並將其呈現爲HTML。

這裏的重要部分是,所有這些都是在用戶請求時發生的,而不是在數據存儲時發生。

+0

我想避免查詢數據庫的開銷,然後在網站的用戶請求它們時分別渲染每個頁面。如果問題頁面已經保存爲html,我只需要按原樣顯示該頁面。以爲這會更有效率! – Nishad

+0

有效點!在這種情況下,我建議在你的view方法中使用'@cache_page()'裝飾器。 查看文檔[here](https://docs.djangoproject.com/en/dev/topics/cache/#the-per-view-cache) – OllyTheNinja

相關問題