【问题标题】:Save a Django model field into a new file将 Django 模型字段保存到新文件中
【发布时间】:2014-02-19 02:05:45
【问题描述】:

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

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 页面。假设我输入了 questionLevel = 1 的问题并假设它是第一个问题,我希望将 1.1.html 存储到我的问题(媒体)目录中。因此,我尝试为此目的使用 FileField 对象,并稍微修改了 save() 模块。但是该文件没有被创建。我运行内置的 Django 管理 shell 来检查问题链接的内容,它与问题文本的内容相同。有人可以告诉我这里哪里出错了吗? 我是 Django 新手,如果有帮助的话!

【问题讨论】:

    标签: python django django-models ckeditor filefield


    【解决方案1】:

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

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

    那么你的urls.py中有一个url

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

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

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

    【讨论】:

    • 我想避免查询数据库然后在站点用户请求它们时单独呈现每个页面的开销。如果问题页面已经保存为 html,我只需按原样显示该页面。觉得这样会更有效率!
    • 有效点!在这种情况下,我建议在您的视图方法上使用 @cache_page() 装饰器。请参阅文档here
    猜你喜欢
    • 2020-05-07
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    相关资源
    最近更新 更多