将Django模型字段保存到新文件中

时间:2014-02-19 02:05:45

标签: python django django-models ckeditor filefield

在我的models.py文件中,我有一个名为'Problem'的类,它基本上存储了一个问题,答案以及该问题的一些评分相关信息。这是该类的代码:

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的新手,如果有帮助的话!

1 个答案:

答案 0 :(得分:0)

为什么要为它创建HTML页面?

通常在django中,您可以将数据存储在数据库中 - 正如您所做的那样 - 减去链接。

然后你有一个网址urls.py

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

将在您的views.py文件中调用showProblem(),当用户请求http://<yourserver>/1/1/时,该文件将获取该信息并将其呈现为HTML。

这里的重要部分是当用户请求时,而不是在存储数据时,所有这些都会发生。